Javascript must be enabled in your browser to use this page.
Please enable Javascript under your Tools menu in your browser.
Once javascript is enabled Click here to go back to PcTekno.NET | PTN |
Skip to content
Site Araçları
pc webmaster bilgisayar teknoloji tekno haber pc webmaster bilgisayar teknoloji tekno haber pc webmaster bilgisayar teknoloji tekno haber pc webmaster bilgisayar teknoloji tekno haber pc webmaster bilgisayar teknoloji tekno haber pc webmaster bilgisayar teknoloji tekno haber pc webmaster bilgisayar teknoloji tekno haber pc webmaster bilgisayar teknoloji tekno haber pc webmaster bilgisayar teknoloji tekno haber
Konumunuz: Anasayfa arrow PHP & Mysql arrow "Register Globals" Kapalı İken "Predefined Variables" ların Çalışır Hale Gelmesi
"Register Globals" Kapalı İken "Predefined Variables" ların Çalışır Hale Gelmesi Yazdır E-posta
Üye Değerlendirme: / 1
Kötüİyi 
Ç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)Add Comment

Yorum Yazın
Yorum ekleyebilmeniz için giriş yapmanız gerekiyor. Henüz bir hesabınız yoksa lütfen kayıt olun.

busy
 
< Önceki   Sonraki >

Ana Menü

Anasayfa
Haberler
PC Videolar
Download
Torrent Ara
Foto Galeri
E-Market
:: PcTekno.NET Forum ::
PC Sözlük
Sitemap
Arama
İletişim

Giriş Formu






Kayıp Parola?
Hesabınız yok mu? Kayıt Ol

İp Adresiniz

Ip Adresiniz: 38.103.63.55

Alexa