Register Globals Kullanımı

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&inodot;c&inodot; taraf&inodot;ndan de&gbreve;i&scedil;tirilebilir
    $good_login = 1; 
}

if ($good_login == 1) { // get/post/cookies ile kullan&inodot;c&inodot; taraf&inodot;ndan de&gbreve;i&scedil;tirilebilir
    fpassthru ("/highly/sensitive/data/index.html");
}
?>

Örnek 4-9. register_globals = off olarak çalışmak

<?php
if($HTTP_COOKIE_VARS['username']){ 
    // yaln&inodot;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&inodot; sald&inodot;r&inodot; 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.