Tweet

Ana Sayfa   Forum   PHP
Yeni Başlık Cevap Ekle
white_bullet Php ile güvenli kodlar yazmak (05/11/2006 20:54)
profil Dia
 offline OFFLINE
 Sleepless Coder

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.-->

Üye Profili

white_bullet Re:Php ile güvenli kodlar yazmak (25/11/2006 22:14)
profil Dia
 offline OFFLINE
 Sleepless Coder

Asla include() veya require() fonksiyonlarına kullanıcılardan gelen değişkenleri uygulamıyalım.

Örneğin

CODE:

<? 
if($page)
{
include($page);
}
?>


Bu şekildeki bir kullanımda eğer page değişkeni bir istek değişkeni ise kötü niyetli bir kullanıcı
(register_globals ın ol oldığunu varsayarsak)

index.php?page=e t c/pa ss wd

şeklinde bir kullanımla sifrelerin kayıt edildiği dosyayı görüntüleyebilir. Yada..

index.php?page=http: //benimsitem.com/hack script.php

Seklinde bir kullanımla kendi scriptini sizin sitenizde yayınlayabilir.
Diyelimki mutlaka kullanmamız gerekiyor

CODE:
<?
$pages = array('index.html', 'sayfa1.html', 'sayfa2.html');
if(in_array($page, $pages) )
{
include($page);
{
else
{
die("İyi deneme");
}
?>


Şeklinde bir kodla girilen sayfanın sadece bizim belirlediğimiz sayfalar olmasından emin olabiliriz.

<!--The Coders Script v2.0 çok yakında-->
<!--Bana balık vermeyin balık tutmayı öğretin.-->

profil

white_bullet Re:Php ile güvenli kodlar yazmak (25/11/2006 22:14)
profil Dia
 offline OFFLINE
 Sleepless Coder

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;?>


şeklinde saldırlardan bir nebze korunabilirsiniz. get_magic_quotes_gpc() fonksiyonundan iki değer döner eğer server otomatik olarak formdan gönderilen değişkenlere ( ) ekliyorsa true değeri dönereğer eklemiyorsa false teğeri döner bizde buna göre ( ) ekliyoruz.

addsalshes() fonksiyonu ile ekledimiz ( ) leri. stripslashes() fonksiyonu ilede kaldırabiliriz.

addsalshes() fonksiyonuna alternatif olarak mysql_real_escape_string() fonksiyonunuda kullanabiliriz. PHP 4.3.0 dan sonra kullanılmaya başlamıştır. Aynu şekilde sprintf() fonksiyonuyla sorgularda değişken tiplerinide kontrol edebiliriz. Örnek bir kullanım inceleyelim.
CODE:
<?
$sql= sprintf("UPDATE kullanici SET isim='%s' WHERE ID=1",mysql_real_escape_string($isim))
?>


Bu kullanımda hem $isim değişkenini mysql özel karakterlerinden kurtarıyoruz hemde bir string olup olmadığını kontrol ediyoruz.

<!--The Coders Script v2.0 çok yakında-->
<!--Bana balık vermeyin balık tutmayı öğretin.-->

profil

white_bullet Re:Php ile güvenli kodlar yazmak (29/12/2006 02:26)
profil Hakan99
 offline OFFLINE
 New Coder

eline emegine sağlik

profil

white_bullet Re:Php ile güvenli kodlar yazmak (31/10/2007 12:48)
profil Cryptic
 offline OFFLINE
 Active Coder

PHP ile ilgili PHP Security Consortium tarafından hazırlanmış ingilizce bir döküman

Link : PHP Security

profil
 
1 /
 
Ana Sayfa   Forum   PHP
Yeni Başlık Cevap Ekle
 

Advertisement


MENÜ » FORUM
Menü » Takip et
RSS Facebook Twitter Friendfeed
Sık Kullanılanlar Google Yahoo Live
Menü » Paylaş
E-Posta ile gönder Twitter Facebook Friendfeed
Buzz Stumbleupon Delicious Digg