Şunlar çözüm olabilir:
1. Klasörler için chmod 755, dosyalar için 644
2. Htaccess ile şifreli administrator paneli
3. Popüler ve url tabanlı exploitlere karşı Url frenlemesi (Vbulletin için yazmıştım. Geliştirilebilir. Son exploitlere göre düzenleme yapabilirsiniz.)
***** Yazının tamamı için: Vbulletin Güvenliği. Vbulletin, popüler ve ücretli (lisans gerektiren), php tabanlı bir forum yazılımıdır. Hemen hemen örtüşen önlemler.
<?php
$frenle=$_SERVER['REQUEST_URI'];
//Aşağıdaki if deyimiyle eğer url satırı 55 karakterden uzunsa -Url tabanlı exploitlerin bir çoğu bu değerden uzundur.- diğer satırlara geçmeyi durduruyor. Eğer SEF, url rewrite yapmıyorsanız bu kod ile çoğu URL tabanlı saldırının önüne geçebilirsiniz.
if (strlen($frenle)>=65) {
exit;
}
// Aşağıdaki kod ise eğer url bölümünüzde istenmeyen bir karakter, bölüm varsa çalışmayı durdurmaktadır. Bu da henüz çıkmamış, duyrulmamış url tabanlı açıkların bile önüne geçmenizi sağlayabilir. $bnd1,2,3,4... alanlarını çoğaltarak kendinize göre zenginleştirebilirsiniz. Anlaşılır olması açısından değerler tek tek yazılmış ve döngüye sokulmuştur.
$frenle=strtolower($frenle);
$bnd1=strpos($frenle, "tool");
$bnd2=strpos($frenle, "******");
$bnd3=strpos($frenle, "redire");
$bnd4=strpos($frenle, "location");
$bnd5=strpos($frenle, "script");
$bnd6=strpos($frenle, "html");
$bnd7=strpos($frenle, "include");
$bnd8=strpos($frenle, "insert");
$bnd9=strpos($frenle, "delete");
$bnd10=strpos($frenle, "exit");
$bnd11=strpos($frenle, '//');
$bnd12=strpos($frenle, 'where');
$bnd13=strpos($frenle, 'vb_login');
$bnd14=strpos($frenle, 'xss');
$bnd15=strpos($frenle, 'echo');
$bnd16=strpos($frenle, 'die');
$bnd17=strpos($frenle, 'command');
$bnd18=strpos($frenle, 'cookie');
$bnd19=strpos($frenle, 'cmd');
$bnd20=strpos($frenle, '_md5');
//yukarıda tanımladığımız 11 kural için bir ihlal yakalanmışsa ihlali yapan kişi karşısında echo ile belirtilmiş iletiyi görecek ve orada kalacaktır.
if (($bnd1== true) or ($bnd2== true) or ($bnd3== true) or ($bnd4== true) or ($bnd5== true) or ($bnd6== true) or ($bnd7== true) or ($bnd8== true) or ($bnd9== true) or ($bnd10== true)or ($bnd11== true)or ($bnd12== true)or ($bnd13== true)or ($bnd14== true)or ($bnd15== true)or ($bnd16== true)or ($bnd17== true)or ($bnd18== true) or ($bnd19== true) or ($bnd20== true)) {
echo 'Zararlı olabilecek Url durduruldu! Lütfen kullandığınız Urlye dikkat ediniz.';
exit; }
?>

Örneğin header bölümünde diğer işlemler olmadan önce sıkça kullanılan id=-1 parametresini de frenleyebilirsiniz. $idne=$_Get["id"];
if ($idne=='-1') {
Echo ('Sakin...');
exit;
}