Son zamanlarda RFI (Remote File Include) tarzı yöntemlerle birçok hack olayı yaşanıyor birçok kişi bunların önlemini almakta çaresiz kalıyor ve bu yüzden gerek itibarlarından gerekse sitelerinden oluyorlar. RFI açıklarını engelleyemeyenler için bir döküman yazmaya karar verdim. Bu sayede RFI açığınız olsa bile en az zararla hatta 0 zararla nasıl kurtulacağınızı anlatacağım. Bu ayarlar sayesinde hem güvenliğinizi hem de performansınızı artırmış olacaksınız.
php.ini yapılandırmasına geçmeden önce sunucumuzda bulunan klasör ve dosya izinlerini chmod doğru şekilde ayarlayalım. Genelde FTP programlarında dosya yada klasör üzerine sağ click yapılıp yada file seçeneğinden Change Attributes ya da Properties / CHMOD seçeneklerinden düzenleriz burada permissions altında yani izinler altında önerilenleri girmek en uygunudur.
Klasörler için: 755
Dosyalar için: 644
İzinleri bu şekilde ayarlamanız güvenlik için ilk adımı atmanıza yardımcı olur.
php.ini yapılandırması:
Eğer server admini iseniz yani root yetkilere sahipseniz bu ayarları serverda bulunan tüm siteler için yapabilirsiniz genellikle /usr/local/Zend/etc/ , /usr/local/lib/ altında bulunur php.ini dosyasını açarak düzenleyebilirsiniz veya httpd.conf dosyasının doğru yapılandırılmasıyla da olur. Daha sonra apache'ye restart atmanız gerekmektedir.
Root değilseniz sadece kendi siteniz için yapmanız gerekiyorsa kök dizininizde (public_html) bir php.ini dosyası oluşturarak veya varolan php.ini dosyasının içerisine altta verdiğim kodları ekleyerek güvenliğinizi sağlayabilirsiniz. Fakat sitenizle aynı serverda bulunan diğer sitelerden kaynaklanan açıklardan yararlanan kişiler root olmayı başarırlarsa burada anlatılanlar yetersiz kalır, root olmayı başaramazlarsa ve sitenizin şifrelerini kaptırmazsanız güvendesinizdir.
Altta anlattığım bilgiler iyi bir güvenlik için yapılması gerekenler olduğundan dolayı bunları uyguladıktan sonra bazı scriptlerinizin çalışması engellenmiş olabilir. Ama scriptin çalışmasını engelleyen değerleri iptal ederseniz script tekrar doğru şekilde çalışacaktır
Şimdi gelelim php.ini yapılandırmasına:
disable_functions (Güvenlik)
disable_functions ile serverınızda birçok fonksiyonun çalışmasını engelleyebilirsiniz bu sayede sitenize inject edilen scriptler, sheller için güvenliğinizi almış olursunuz. Bu kadar fonksiyon fazla gelebilir ama iyi bir güvenlik için şart. Bu kadar sayıda devre dışı bırakılan fonksiyonlar ilk defa cyber-istihbarat.org adresinde verilmiştir.
Safe Mode adından da anlaşılacağı gibi Güvenli Mod anlamına geliyor. Safe Mode genelde birçok serverda Off durumdadır ve bu da birçok tehlikeye davetiye çıkaran unsurlar arasında yer alır. Güvenli Modu Açık durumuna getirmek shellerin serverımızda istedikleri gibi dolaşmalarını, exploitlerin çalıştırılmasını ve komutların execute edilmelerini önler. Günümüzde açık olan güvenlik modunu kapalı duruma getiren scriptler mevcut fakat altta anlatılan önlemlerle bunun da önüne geçilebilir.
Önerilen:
Kod:
safe_mode = on
-------------------------
register_globals (Güvenlik ve Performans)
php.ini dosyasında bulunan post get ile gönderilen değerlere kullanıcı adlarıyla ulaşılıp ulaşılamayacağını belirtir. Session, cookie değerlerini kendi adıyla tanımlayarak birer değişken olmasına neden olur. Off olarak ayarlanırsa bu gibi değerlere kendi tanımladığı şekilde ulaşılamaz.
Önerilen:
Kod:
register_globals = off
-------------------------
allow_url_fopen (Güvenlik)
allow_url_fopen default olarak açık şeklinde gelir ve bunun on açık olması file_get_contents(), include(), require() fonksiyonlar uzaktaki dosyaları da işlemesine olanak tanır. Bunlara verilen bilgiler hiçbir kontrolden geçirilmezse kritik güvenlik açıklarını sebep olur.
Önerilen:
Kod:
allow_url_fopen = off
-------------------------
allow_url_include (Güvenlik)
Bu değer kapalı yapıldığında require ve include ile uzaktan dosya çağırılması engellenmiş olur ve bu sayede büyük bir tehlikeden kurtulmuş olursunuz.
Önerilen:
Kod:
allow_url_include = off
-------------------------
display_errors (Güvenlik)
Bu seçenek sitenizin çalışmasında oluşacak bir hatayı tarayıcıya yansıtıp yansıtmayacağını belirler yani siteniz için diyelim bir forum veya portal kullanıyorsunuz ve bunların çalışması esnasında genelde Fatal error: Call to undefined function get_header() in /home/vhosts/site.com/index.php on line 37 şeklinde benzeri hata görülür bunların gözükmesini engellemek için bu değeri kapalı duruma getirmek gerekir zira kötü niyetli kişiler sitenizin serverda bulunan tam yolunu öğrenmiş olurlar.
Önerilen:
Kod:
display_errors = Off
-------------------------
cgi.force_redirect (Güvenlik)
Bu değer normalde on olarak gelir ve Windows sunucularında IIS, OmniHTTPD gibi buralarda kapatılması gerekir. Kendi sunucunuz için bu durum yoksa değiştirmenize gerek yoktur.
Önerilen:
Kod:
cgi.force_redirect = on
-------------------------
magic_quotes_gpc (Güvenlik ve Performans)
Magic Quotes işlemi GET/POST yöntemiyle gelen Cookie datasını otomatikmen PHP script'e kaçırır. Önerilen bu değerin kapalı olmasıdır.
Önerilen:
Kod:
magic_quotes_gpc = off
-------------------------
magic_quotes_runtime (Güvenlik ve Performans)
Magic quotes çalışma sürecinde data oluşturur, SQL'den exec()'den, vb.
Önerilen:
Kod:
magic_quotes_runtime = Off
-------------------------
magic_quotes_sybase (Güvenlik ve Performans)
Sybase-style magic quotes kullanır (Bunun yerine \' ' bununla '' kaçırır)
Önerilen:
Kod:
magic_quotes_sybase = Off
-------------------------
session.use_trans_sid (Güvenlik)
Bu ayarı dikkatli ayarlayın, kullanıcı emaile aktif oturum ID'si içeren URL gönderebilir
Önerilen:
Kod:
session.use_trans_sid = off
-------------------------
open_basedir (Güvenlik)
Burada belirttiğiniz bir dizin haricindeki dosyaları veya klasörleri görmeleri olanaksızdır yani sitenizde sadece dosyalar dizininin görüntülenmesini istiyorsanız böyle yapılır
Kod:
/home/vhosts/site.com/public_html/dosyalar/
veya hem dosyalar hem de resimlerin bulunduğu yerin gözükmesi için de böyle
/resimler ve /dosyalar yazan yere görünmesini istediğiniz dizinleri belirtin.
-------------------------
safe_mode_exec_dir (Güvenlik)
Safe Mode açıkken bunu yaparsanız sadece belirttiğiniz dizinde işlem yapılmasına izin verirsiniz. Safe Mode kapalıyken burada belirttiğiniz dizinlerin dışında hiçbir dizinde işlem yapılamaz. /home/vhosts/site.com/public_html/ yazan yere kendi dizininizi yazabilirsiniz. Böylece, diyelim /etc v.s dizininden herhangi birşey çalıştırmasına izin vermezsiniz.
Safe Mode yani Güvenli Mod açıkken yapılması tavsiye edilmez. Çünkü safe mode burada belirttiğiniz dizinde etkisiz kalacaktır. Güvenli Mod'un açık olması o dizinde işe yaramayacaktır. Güvenlik için, Safe Mod yani Güvenli Mod off kapalıyken kullanılması daha uygundur.
-------------------------
asp_tags (Güvenlik)
ASP Style < % % > taglarına izin verilip verilmeyeceği belirlenir, kapalı duruma getirilmesi önerilir.
expose_php açık ise kapalı yapılması önerilir. Aksi takdirde PHP ile yaptığınız herşeyde sunucu tarafından PHP sürümü gibi bilgiler gösterilir. Hackerlar hatta Lamerlar bu bilgileri severler. Bunları engellemek için off konumuna getiriniz.
Önerilen:
Kod:
expose_php = Off
-------------------------
html_errors (Güvenlik)
Bu değerin açık olması durumunda PHP tıklanabilir hata mesajları üretecektir. Kapalı olması güvenlik için önerilir.
Önerilen:
Kod:
html_errors = off
-------------------------
max_execution_time (Güvenlik)
Scriptinizi maksimum uygulamayı yürütme zamanı mesela kullanıcı bir linke tıkladı ve bu linkin açılması belirtilen saniyeden fazla olursa sayfa sitenizin serverda bulunduğu tam yolu göstererek hata verir. Bu hataların gözükmesi güvenlik açısından sakıncalıdır. 300 saniye yazan yeri istediğiniz zaman ile değiştirebilirsiniz.
Önerilen:
Kod:
max_execution_time = 300
-------------------------
max_input_time (Güvenlik)
Scriptinizin aynı şekilde bir dataya ulaşmak için istek yolladığında maksimum geçen zaman
Önerilen:
Kod:
max_input_time = 300
-------------------------
ServerSignature (Güvenlik ve Performans)
ServerSignature sitenizde bulunmayan bir dosyanın bakılması durumunda bu sayfanın altında serverla ilgili bir bilgi yer alır ve bu da performansı düşürür ayrıca kötü niyetli kişiler serverla ilgili bir bilgi öğrenmiş olurlar.
Önerilen:
Kod:
ServerSignature = Off
-------------------------
UseCanonicalName (Performans)
Bu ayarın açık olması Apache self-referencing URL oluşturduğunda Server ismi ve porttan oluşan bir çözülmüş isim kullanır.
Önerilen:
Kod:
UseCanonicalName = Off
-------------------------
HostnameLookups (Performans)
HostnameLookups açık olması performansın düşmesine neden olur. IP numarası DNS sunucusundan bakılarak adres öğrenilir buda performansı düşürür.
Önerilen:
Kod:
HostnameLookups = Off
-------------------------
ExtendedStatus (Performans)
Serverın durumunu öğrenmek için server-status kullanılıyorsa Apache her an bu işlemcinin çağrılabileceğini beklediği için hazır bekler ve her an sistem saatini öğrenmesi gerekir bu da performansı düşürür.
Önerilen:
Kod:
ExtendedStatus = off
-------------------------
register_long_arrays (Güvenlik ve Performans)
Bu değerin on açık olması durumunda sisteminizde her script çalışmayacaktır install v.s yapmakta hatalarla karşılaşabilirsiniz ama iyi bir güvenlik ve performans için off duruma getirilir.
Önerilen:
Kod:
register_long_arrays = Off
-------------------------
allow_call_time_pass_reference (Performans)
Fonksiyonların çağrılma zamanında yaşanan uyumsuzluklarla ilgili uyarı verir.
Önerilen:
Kod:
allow_call_time_pass_reference = off
-------------------------
enable_dl (Güvenlik)
Bu değerin off kapalı olması gerekir aksi halde kişilerin sistemde php modüllerinde çalışma yapmasına olanak sağlar ve sistemde rahat dolaşmalarını sağlar güvenlik için kapalı olması gerekir.
Önerilen:
Kod:
enable_dl = off
-------------------------
track_errors (Güvenlik ve Performans)
Sürücülerde meydana gelen hatalarda yetki verildiği taktirde hata mesajı errormsg olarak değişkende gösterilir.
Önerilen:
Kod:
track_errors = Off
-------------------------
file_uploads (Güvenlik)
Açık olursa eğer sunucuda dosya yüklenmesine izin verilmiş olur ve bu da ciddi bir güvenlik açığına neden olur eğer kullandığınız scriptden herhangi bir dosya yüklemeniz gerekmiyorsa mutlaka kapalı duruma getiriniz. Bu sayede sitenize herhangi bir shell, script inject edise bile kesinlikle dosya yüklenmesine izin vermez.
Önerilen:
Kod:
file_uploads = off
-------------------------
ignore_repeated_errors (Güvenlik ve Performans)
Açık olursa tekrarlanan hataları loglamaz.
Önerilen:
Kod:
ignore_repeated_errors = Off
-------------------------
ignore_repeated_source (Güvenlik ve Performans)
Tekrarlanan mesajlar engellendiğinde, mesaj kaynağını engeller Bu ayar açık yapıldığında hataları loglamayacaktır farklı dosyalardan ya da kaynaklardan tekrarlanan mesajlarla.
Önerilen:
Kod:
ignore_repeated_source = Off
-------------------------
display_startup_errors (Güvenlik ve Performans)
display_errors değeri on açık olsa bile, Php'nin çalışma sırasında meydana gelen hatalar gözükmeyecektir. Bu değerin şiddetle off kapalı duruma getirilmesi önerilir.
Önerilen:
Kod:
display_startup_errors = off
-------------------------
safe_mode_gid (Güvenlik)
UID - GID kontrollerini sadece UID ile yapmasına izin verir böylece aynı grupta dosyalar bulunsa bile göremezler yani serverda bulunan diğer clientların scriptlerini v.s görmeleri engellenir.
Önerilen:
Kod:
safe_mode_gid = Off
-------------------------
output_buffering = 4096 (Performans)
4 KB'lik bir tampon çıktısı ayarlar output buffer
Önerilen:
Kod:
output_buffering = 4096
-------------------------
register_argc_argv (Performans)
Kapalı olursa gereksiz ARGV ve ARGC kayıtlarını önler. PHP nin ARGV ve ARGC değişkenlerini bildirip bildirmemesini anlatır.
(Ortam, GET, POST, Çerez, Sunucu) bunların işlenmedeki sıralarını belirler.
Önerilen:
Kod:
variables_order = EGPCS
Üstte belirttiğim kodları php.ini dosyanıza alt alta ekleyebilirsiniz.
ÖNEMLİ NOT:
Bazen sadece safe mod'un açık olması bile bazı scriptlerinizin çalışmasını engeller. Üstte anlattıklarım en başta da belirttiğim gibi sizdeki güvenliği fazlasıyla arttırdığı için belki birçok web uygulamanız çalışmayacak hale gelecek fakat bazı web uygulamaları üstteki ayarlarla sorunsuz bir şekilde çalışabiliyor sadece script kurulumlarında fonksiyonları devre dışı bırakmanız gerekebilir. Bu yüzden bu ayarları sizin için en uygun olacak şekilde ayarlamalısınız gerekirse tek tek denemelisiniz.
bir köpeğin dostluğu daha iyidir bir dostun köpekliğinden... '' ShAroN ''
RE: Sitenizi, 5 Dakikada Hacklenmeye Karşı Koruyun
emeğine sağlık
CcC_----İstisna Bizsek kaideyi BOZARIZ----_CcC
"Ey İman edenler! Yahudi ve Hıristiyanları veliler (dost ve üzerinize hâkimler) edinmeyin, (çünkü) onlar birbirlerinin velileri (dostları) dırlar. İçinizden kim onları dost edinirse, o da onlardandır. Şüphesiz ki Allah zulmeden bir kavmi hidayet etmez." (Maide, 51)
RE: Sitenizi, 5 Dakikada Hacklenmeye Karşı Koruyun
emeğine sağlık çok süper bir paylaşım.
tabi bu php,linux-apachi serverlarda geçerli yöntemler.
birde kullanıcılarımıza uyarı serverda php.ini dosyasını değiştirirken dikkat ediniz.yptığınız ufak hatalar bazı scriptlerin çalışmasında hata almanıza sebebiyet verebilir.