PHP'nin bir özelliği, register_globals = off
ile konfigüre edilerek güvenliğin arttırılabilmesidir. Bu özelliğin kapatılması, PHP
içine direk olarak hiçbir değerin girmemesini sağlamak anlamına gelir. Bu şekilde,
potansiyel bir saldırgan tarafından yapılabilecek değişken saldırılarını azaltmış olursunuz.
Değişkenlere saldırmaya çalışmak onlara fazladan zamana mal olacak, ve iç değişkenler
kullanıcı tarafından gönderilen verilerden verimli bir şekilde izole edilmiş olacaktır.
Bu durum PHP ile çalışırken harcanması gereken zamanı arttırsa da, faydaları
kaybettiğiniz zamana kıyasla çok daha fazladır.
Örnek 4-8. register_globals=off olmadan çalışmak <?php
if ($username) { // get/post/cookies ile kullanıcı tarafından değiştirilebilir
$good_login = 1;
}
if ($good_login == 1) { // get/post/cookies ile kullanıcı tarafından değiştirilebilir
fpassthru ("/highly/sensitive/data/index.html");
}
?> |
|
Örnek 4-9. register_globals = off olarak çalışmak <?php
if($HTTP_COOKIE_VARS['username']){
// yalnızca çerezden gelebilir
$good_login = 1;
fpassthru ("/highly/sensitive/data/index.html");
}
?> |
|
Bunu akıllıca kullanarak, saldırı işlemi gerçekleştiğinde çalışacak bir uyarı mekanizması
kurabilirsiniz. Değişkenin gelmesi gerektiği yeri tam olarak biliyorsanız, gönderilen
verinin uygunsuz olup olmadığını denetleyebilirsiniz. Bu saldırma amaçlı kullanılan
verinin tamamen durdurulabileceğini garanti etmese de, saldırganı doğru saldırı
şeklini tahmin etmeye zorlar.
Örnek 4-10. Basit değişken saldırısını tespit etmek <?php
if ($HTTP_COOKIE_VARS['username'] &&
!$HTTP_POST_VARS['username'] &&
!$HTTP_GET_VARS['username'] ) {
// Kullaniciyi dogrulamak icin diger yöntemleri uygular...
$good_login = 1;
fpassthru ("/highly/sensitive/data/index.html");
} else {
mail("admin@example.com", "Olası saldırı denemesi", $HTTP_SERVER_VARS['REMOTE_ADDR']);
echo "Güvenlik ihlali, yönetici uyarildi.";
exit;
}
?> |
|
Elbette, register_globals değerinin basit bir şekilde kapatılması, kodun güvenliğinin
sağlandığı anlamına gelmez. Gönderilen her veri parçası için, farklı denetleme işlemlerinin
de yapılması gereklidir.