Merih Forum Programlama ve yazılım algoritmalar php php register_globals kullanımı

  • Toplam: 0 Oy - Ortalama: 0
  • 1
  • 2
  • 3
  • 4
  • 5
php register_globals kullanımı

 
#1

Kod:
register_globals

 Kullanımı

Uyarı
Bu özelliğin kullanımı PHP 5.3.0 itibariyle ÖNERİLMEMEKTE olup PHP 5.4.0'da tamamen KALDIRILMIŞTIR.

PHP'deki belki de en tartışmalı değişiklik, register_globals PHP yönergesinin öntanımlı değerinin PHP » 4.2.0'da 
Kod:
On

 iken 

Kod:
Off

 yapılmasıdır. Bu yönerge üzerindeki geçmiş deneyimlere dayanmak oldukça yaygındı ve çoğu kişi yönergenin varlığını bile bilmediği gibi PHP'nin böyle çalıştığını varsayardı. Bu sayfada, bu yönerge ile yazılan kodun nasıl güvensiz olabileceği gösterilecek, fakat güvensizliğin yönergenin kendisinden ziyade nasıl yanlış kullanımından kaynaklandığı açıklanacaktır.

register_globals 
Kod:
On

 iken, HTML formlarındaki istek değişkenleri gibi bir takım değişkenler betiğinize dahil edilir. PHP'nin değişken ilklendirme gerektirmeme olgusu güvensiz kod yazımını daha da kolaylaştırır. Zor bir karar olmasına rağmen PHP topluluğu bu yönergeyi öntanımlı olarak iptal etmeyi uygun gördü. Yönergenin değeri 

Kod:
On

 iken, kullanıcılar, değişkenleri, aslında ne olup bittiğini bilmeden sadece varsayımla kullanırdı. Betiğin kendisi tarafından tanımlanmış dahili değişkenler kullanıcı tarafından gönderilen istek verileri ile karışırdı. register_globals 

Kod:
Off

 yapılınca bu değişti. Yönergenin yanlış kullanımını bir örnekle açıklamaya çalışalım:


Örnek 1 - 
Kod:
register_globals = on

 ile yanlış kullanım örneği

Kod:
<?php
// Sadece kullanıcı kimliği doğrulanıyorsa $yetkili = true olmalı
if (authenticated_user()) {
    $yetkili = true;
}

// $yetkili değişkenini başta false ile ilklendirmediğimizden
// bu atama GET auth.php?yetkili=1 şeklinde register_globals
// üzerinden yapılmış olabilir. Dolayısıyla, kullanıcı kendini
// yetkiliymiş gibi gösterebilir!
if ($yetkili) {
    include "/gayet/hassas/veriler.php";
}
?>

Kod:
register_globals = on

 iken yukarıda yürüttüğümüz mantık zarar görebilir. 

Kod:
register_globals = off

 olduğunda, $yetkili değişkenine istek üzerinden değer atanamayacağından bir açık söz konunu olmayacaktır. Aslında değişkenleri baştan ilklendirmek iyi bir programcılık alışkanlığıdır. Yukarıdaki örnekte baştan 

Kod:
$yetkili = false

 yapabilirdik. Bu ilklendirme yapılmış olsaydı, kullanıcı öntanımlı olarak yetkisiz olacağından 

Kod:
register_globals

 yönergesinin değerinin ne olduğunun bir önemi olmayacaktı.

Diğer bir örnek oturumlarla ilgilidir. 
Kod:
register_globals = on

 iken, aşağıdaki örnekte $kullanici değişkenini de kullanabilirdik, fakat tekrar hatırlatmakta yarar var: $kullanici, GET gibi başka bir kaynaktan da (örn, URL üzerinden) gelebilirdi.


Örnek 2 - 
Kod:
register_globals

 On veya Off iken oturum örneği

Kod:
<?php
// $kullanici'nin nereden geleceğini bilemezdik
// Fakat oturum verisi için $_SESSION kullanınca biliriz
if (isset($_SESSION['kullanici'])) {

    echo "Merhaba <b>{$_SESSION['kullanici']}</b>";

} else {

    echo "Merhaba <b>Ziyaretçi</b><br />";
    echo "Oturum açmak ister misiniz?";

}
?>

Sahtecilik yapılmaya çalışıldığında uyaracak önleyici tedbirler almak da mümkündür. Bir değişken vaktinden önce geliyorsa, gönderilen verinin ilgisiz bir teslimat çeşidinden gelip gelmediğini sınayabilirsiniz. Verinin sahte olmadığını garanti etmese de saldırganın yaptığı sahtecilik türünün tahmin edilmesi gerekir. İstek verisinin geldiği yeri önemsemiyorsanız, GET, POST ve COOKIE verilerinin bir karışımını içeren $_REQUEST dizisini kullanabilirsiniz. Ayrıca, Dış Kaynaklı Değişkenler bölümüne de bakınız.

Örnek 3 - Basit değişken sahteciliğinin saptanması
Kod:
<?php
if (isset($_COOKIE['MAGIC_COOKIE'])) {

    // MAGIC_COOKIE bir çerezden gelir.
    // Çerez verisini doğrulamayı unutmayın!

} elseif (isset($_GET['MAGIC_COOKIE']) || isset($_POST['MAGIC_COOKIE'])) {

   mail("admin@example.com", "Olası kırma çabası", $_SERVER['REMOTE_ADDR']);
   echo "Güvenlik ihlali; yönetici uyarıldı.";
   exit;

} else {

   // MAGIC_COOKIE bu istek (REQUEST) üzerinden atanmamış.

}
?>

Şüphesiz, tek başına 
Kod:
register_globals = off

, kodunuzun güvenli olduğu anlamına gelmez. Gönderilen her veri parçası başka yollarla da ayrıca sınanmalıdır. Kullanıcı verinizi daima doğrulayın ve değişkenlerinizi daima ilklendirin! İlklendirilmemiş değişkenleri görmek için error_reporting() işlevi ile 

Kod:
E_NOTICE

 seviyesinden hataların gösterilmesini sağlamalısınız.

Kod:
register_globals




Ara
Cevapla


[-]
Hızlı Cevap

İnsan Doğrulama:
Aşağıda görünen onay kutusunu işaretleyiniz. Bu işlem otomatik spam kayıtları önlemek için kullanılır.

Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  PHP Statik Değişken Kullanımı kıllıbacak 0 498 23-03-2019, Saat: 23:54
Son Yorum: kıllıbacak
  PSR-4 Autoloader Standardı ve Composer ile Kullanımı kıllıbacak 0 428 23-03-2019, Saat: 23:46
Son Yorum: kıllıbacak
  PHP – PHP’DE FORM İŞLEMLERİ POST VE GET METODLARININ KULLANIMI sempatik141 1 3,161 17-06-2017, Saat: 21:13
Son Yorum: alifurkan
  Php ile Google Maps Api Kullanımı Adamantin 0 1,866 19-03-2017, Saat: 18:55
Son Yorum: Adamantin

Digg   Delicious   Reddit   Facebook   Twitter   StumbleUpon  


Konuyu Okuyanlar:
1 Ziyaretçi

   
Türkçe Çeviri: MCTR, Forum Yazılımı: MyBB, © 2002-2021 MyBB Group.  



Merih Forum® bilgi paylaşım platformu. 2015-2020 Tüm hakları saklıdır.