Php öğrenilmesi ve kullanımı çok kolay bir dil ve kullanıcı kitlesi çok geniş. Herkez php kodu yazıyor. Bu kodların büyük bir bölümü günü kurtamak maksadıyla yazılmış kodlar. Yani hedefteki işlemi yapıyor fakat bunu yanında birçok açık yaratıyor. İşte bu başlık altında kodlama yaparken dikkatten kaçan ufak ama bir okadar tehlikeli açıklardan bahsediceğim. Benim unuttuğum yer vermediğim açıkları bildirmek için hiç çekinmeyin bir cevapta siz ekleyin Let's Go #:)
<!--The Coders Script v2.0 çok yakında-->
<!--Bana balık vermeyin balık tutmayı öğretin.-->
Asla include() veya require() fonksiyonlarına kullanıcılardan gelen değişkenleri uygulamıyalım.
Örneğin
CODE:
<?
if($page)
{
include($page);
}
?>
<?
$pages = array('index.html', 'sayfa1.html', 'sayfa2.html');
if(in_array($page, $pages) )
{
include($page);
{
else
{
die("İyi deneme");
}
?>
<!--The Coders Script v2.0 çok yakında-->
<!--Bana balık vermeyin balık tutmayı öğretin.-->
VeriTabanı na sorgu göndermeden önce stringleri mutlaka tehlikeli karakterlerden kurtarmalıyız phpdekurtama karakter ( ) dır. Farklı fonksiyonlarla kurtama karakterini stringlere uygulayabiliriz. Bunların en basiti addslashes() fonksiyonıdır. Bakalım tehlikeli karakterlerden kurtarmaksa neler mi olur? Bakalım. Diyelimki bir update sorgumuz var ve bize kullanıcı adımızı değiştirmek istiyoruz.
UPDATE kullanici SET isim='$isim' WHERE ID=1;
Uygulanan fonksiyon bu şekilde fakat isim değişkeninin içeriğini kotrol etmedik diyelim. Kullanıcımız $isim değişkenini formdan okan olarak gönderirse;
UPDATE kullanici SET isim='okan' WHERE ID=1;
sorgusu gider ismimiz okan olarak değişir hiçbir problem yok. Ya kullanıcımız niyeti bozupta $isim değişkenini
okan',Admin='1
olarak gönderdi diğelim bakın neler oluyor.
UPDATE kullanici SET isim='okan',Admin='1' WHERE ID=1;
Eğer bu sorgu giderse kullanıcımız bir site yöneticisi durumuna gelmiştir. Eğer $isim değişkenini
$isim=addslashes($isim); fonksiyonundan geçirirsek sorgumuz
UPDATE kullanici SET isim='okan',Admin='1' WHERE ID=1;
haline gelecektir ve ( ) karakteri sayesinde dan sonra gelen tek tırnak karakterleri yok olur ve $isim değişkenimiz 'okan , Admin=1' olacaktır ve dolayısla sorgu çalışmayacaktır.
Bir kontrol örneği vermek gerekirse
CODE:
<?
if (!get_magic_quotes_gpc()) {
$isim = addslashes($_POST['isim']);
} else {
$isim = $_POST['isim'];
}
$sql=UPDATE kullanici SET isim='$isim' WHERE ID=1;?>
<?
$sql= sprintf("UPDATE kullanici SET isim='%s' WHERE ID=1",mysql_real_escape_string($isim))
?>
<!--The Coders Script v2.0 çok yakında-->
<!--Bana balık vermeyin balık tutmayı öğretin.-->
PHP ile ilgili PHP Security Consortium tarafından hazırlanmış ingilizce bir döküman
Link : PHP Security
