Anasayfa İletişim RSS
Siraceddin El Derslerini Okumak için Tiklayin Web Tasarımı İçin Bazı İpuçları
Burada ifade edeceğim ipuçları sadece yol gösterici bir nitelik taşıyor, dini bir misyon gibi yapışılmasına gerek yok. Uygulanabilir olanları yanında olmayanları da olabilir. Ticari bir amaç taşıyan siteniz varsa daha fazla dikkat etmenizi öneririm, o kadar.
 
Şimdi Üye Ol | Şifremi Unuttum
 
 
 
Anasayfa » PHP & MySQL (120 ders)
 
"Register Globals" Kapalı İken "Predefined Variables" ların Çalışır Hale Gelmesi

Yazar: Mehmet Akif Eker  
Eklenme: 26.08.2007   Okunma: 345    Puan: 5   Seviyesi:  Orta
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 );

    }

}

 
  • Currently 5.00/5
Değelendirmek için üye girişi yapmanız gerekmektedir
EkleBunu Sosyal Paylam Butonu
"Register Globals" Kapalı İken "Predefined Variables" ların Çalışır Hale Gelmesi Dersini Yazdırın

""Register Globals" Kapalı İken "Predefined Variables" ların Çalışır Hale Gelmesi" dersi için 2 yorum var

27.08.2007 Alyyone diyor ki:
Ders gerçekten güzel olmuş eline sağlık ama ufak bir ekleme yapayım register globals kapalı sunucularda hostunuza bir .htaccess oluşturarak
[code]php_flag register_globals on[/code]
içine bu kodları yazarak register globalsı açabilirsiniz.

28.08.2007 delicocuk diyor ki:
Evet bu şekilde de yapılabilir ancak sunucunun yorulacağını tahmin ediyorum bu şekilde.

Kolay gelsin

ye olmadan yorum ekleyemezsiniz !


UYARI: SANALKURS'ta yer alan materyaller ile ilgili her türlü sorumluluk hazırlayan veya gönderene aittir. SANALKURS'ta yer alan hiçbir makale, yazarından izinsiz başka bir yerde yayınlanamaz. SANALKURS kullanıcıları ve üyeleri, üçüncü kişilerin telif hakkı sahibi bulunduğu her türlü fikri eser, fotoğraf, resim vb. materyal ve ürünleri kullanamazlar. SANALKURS kullanıcı ve yazarlarının, üçüncü kişilerin telif hakkı sahibi olduğu yazı, resim vb. ürünleri kullanması durumunda, her türlü hukuki ve cezai sorumluluk kendilerine aittir. Söz konusu haksız kullanım nedeniyle SANALKURS .NET'in hiçbir hukuki sorumluluğu bulunmamakta olup, haksız kullanım nedeniyle SANALKURS.NET'in üçüncü kişilere ödemek zorunda kalabileceği her türlü tazminat ve/veya adli/idari para cezaları ilgili Sanalkurs kullanıcılarından rücu edilecektir.
 İSTATİSTİKLER
XML Kaynağımızdan yararlanarak sitemizdeki derslerimizi masaüstünüzden yada web sitenizden takip edebilirsiniz
ÇEVRİMİÇİ 73 Ziyaretçi, 1 Üye
ziyade
Bugün: 761, Dün: 4674, Bu Ay: 20413, Toplam Ziyaret: 1048279, Toplam Üye: 92366, Son Üye: khnt
Toplam Ders: 1645, Toplam Yazar: 40, Toplam Dosya: 43, Toplam Link: 109
   
RSS Kaynağımızdan yararlanarak sitemizdeki derslerimizi masaüstünüzden yada web sitenizden takip edebilirsiniz