PHP & Mysql
"Register Globals" Kapalı İken "Predefined Variables" ların Çalışır Hale Gelmesi
| "Register Globals" Kapalı İken "Predefined Variables" ların Çalışır Hale Gelmesi |
|
|
| Çarşamba, 29 Ağustos 2007 | |
|
Php.4.1.0 üzerindeki versiyonlarda "register_globals_off" durumunda iken ya da daha eski versiyonlarda mesela formdan gelen bir değişkeni tanımlarken; $degisken = $_POST['degisken'] ;
$degisken = $_GET['degisken'] ; gibi tanımlamamız gerekmektedir. Aslında bu şekilde olması sistemimizin güvenliği açısından çok mantıklı bir uygulamadır ve tavsiye edilen bir uygulamadır. Ancak devamlı bu şekilde yazmak ya da mevcut bir sistemde "register_globals_on" şeklinde uyarlanmış ise bu sizin canınızı sıkabilir.Bunun için tüm GET,POST,SESSION vb. işlemlerine kolay yoldan bir çözüm yolu üretelim; if (!isset($_GET)) { $_GET = &$HTTP_GET_VARS;}
if (!isset($_POST)) { $_POST = &$HTTP_POST_VARS;} if (!isset($_SESSION)) { $_SESSION = &$HTTP_SESSION_VARS;} if (!isset($_SERVER)) { $_SERVER = &$HTTP_SERVER_VARS; } if ( !isset($_ENV)) { $_ENV = &$HTTP_ENV_VARS;} if ( !isset($_COOKIE)) { $_COOKIE = &$HTTP_COOKIE_VARS;} if ( !isset($_FILES)) { $_FILES = &$HTTP_POST_FILES;} if ( !isset($_REQUEST)) { $_REQUEST = &$_GET&$_POST&$_COOKIE&$_FILES;} // Daha sonra extract komutu ile tüm predefined variables ları çıkartıyoruz ve uygulama aşamasına geçiriyoruz. if (isset($_GET)) { extract($_GET); } if (isset($_POST)) { extract($_POST); } if (isset($_SESSION)) { extract($_SESSION); } if (isset($_SERVER)) { extract($_SERVER); } if (isset($_ENV)) { extract($_ENV); } if (isset($_COOKIE)) { extract($_COOKIE); } if (isset($_FILES)) { extract($_FILES); } if (isset($_REQUEST)) { extract($_REQUEST); } ya da array işlemi ile bu işlemi daha basit bir şekilde yapabiliriz.Bu kısım Joomla içerik sisteminin kodlamış olduğu globals.php kısmından alıntı yapılarak düzenlenmiştir. $degiskenliste = array("_GET", "_POST", "_COOKIE", "_SERVER"); foreach($degiskenliste as $globalliste){
$listele = array_keys($$globalliste); foreach($listele as $liste){ $$liste = trim(${$globalliste}[$liste]); } } şeklinde array komutu ile yapabileceğimiz gibi ; // Bu kısım Joomla içerik sistemi globals.php dosyasından alıntı yapılarak düzenlenmiştir. define( 'registerayari', 1 ); // Öncelikle register globals "on" ya da "off" durumunu belirliyoruz.Eğer burada registerayari "1" ise register globals "off" modundadır ve "on" moduna çevireceğiz demek istiyoruz.
//Spoofing yöntemiyle saldırıyı engellemek için fonksiyon yazalım function checkInputArray( &$array, $globalise=false ) { static $banned = array( '_files', '_env', '_get', '_post', '_cookie', '_server', '_session', 'globals' ); foreach ($array as $key => $value) { if (in_array( strtolower( $key ), $banned ) ) { die( 'Geçersiz Değişken <b>' . implode( '</b> or <b>', $banned ) . '</b> passed to script.' ); } if ($globalise) { $GLOBALS[$key] = $value; } } } // Register globals modunu off durumuna çevirmek için bir fonksiyon yazalım; function unregisterGlobals () { checkInputArray( $_FILES ); checkInputArray( $_ENV ); checkInputArray( $_GET ); checkInputArray( $_POST ); checkInputArray( $_COOKIE ); checkInputArray( $_SERVER ); if (isset( $_SESSION )) { checkInputArray( $_SESSION ); } $REQUEST = $_REQUEST; $GET = $_GET; $POST = $_POST; $COOKIE = $_COOKIE; if (isset ( $_SESSION )) { $SESSION = $_SESSION; } $FILES = $_FILES; $ENV = $_ENV; $SERVER = $_SERVER; foreach ($GLOBALS as $key => $value) { if ( $key != 'GLOBALS' ) { unset ( $GLOBALS [ $key ] ); } } $_REQUEST = $REQUEST; $_GET = $GET; $_POST = $POST; $_COOKIE = $COOKIE; if (isset ( $SESSION )) { $_SESSION = $SESSION; } $_FILES = $FILES; $_ENV = $ENV; $_SERVER = $SERVER; } //Register globals modunu "on" moduna çevirmek için bir fonksiyon yazalım function registerGlobals() { checkInputArray( $_FILES, true ); checkInputArray( $_ENV, true ); checkInputArray( $_GET, true ); checkInputArray( $_POST, true ); checkInputArray( $_COOKIE, true ); checkInputArray( $_SERVER, true ); if (isset( $_SESSION )) { checkInputArray( $_SESSION, true ); } foreach ($_FILES as $key => $value){ $GLOBALS[$key] = $_FILES[$key]['tmp_name']; foreach ($value as $ext => $value2){ $key2 = $key . '_' . $ext; $GLOBALS[$key2] = $value2; } } } //Daha sonra çıktımızı alalım if (registerayari == 0) { // register gloal durumunu "off" moduna çeviren fonksiyonu çalıştırır unregisterGlobals(); } else if (ini_get('register_globals') == 0) { // php.ini dosyamızdaki register_globals durumuna bakar ve off yani 0 ise "on" moduna geçecek fonksiyonu çalıştırır registerGlobals(); } else { // php.ini dosyamızdaki register_globals durumuna bakar ve on olduğunu görürse spoofine karşı önlemini alır. checkInputArray( $_FILES ); checkInputArray( $_ENV ); checkInputArray( $_GET ); checkInputArray( $_POST ); checkInputArray( $_COOKIE ); checkInputArray( $_SERVER ); if (isset( $_SESSION )) { checkInputArray( $_SESSION ); } } Yorumlar (0)
![]() Yorum Yazın
Yorum ekleyebilmeniz için giriş yapmanız gerekiyor. Henüz bir hesabınız yoksa lütfen kayıt olun.
|
| < Önceki | Sonraki > |
|---|
| Anasayfa |
| Haberler |
| PC Videolar |
| Download |
| Torrent Ara |
| Foto Galeri |
| E-Market |
| :: PcTekno.NET Forum :: |
| PC Sözlük |
| Sitemap |
| Arama |
| İletişim |
| Video Dersler |
| Virüsler |
| ASP |
| CSS |
| Javascript |
| Html |
| dHtml |
| Güvenlik |
| Delphi |
| PHP & Mysql |
| Windows |
| Bilgisayar ve Donanım |
| Püf Noktası |
| Joomla |
| Google Servisleri |
| Pagerank ve Optimizasyon |