Tekil Mesaj gösterimi
Alt 12 Temmuz 2007, 09:03   #2
Nickolas
Guest
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Yüzdesi:(%)
Cevap: ASP SQL Enjeksiyon




Arkadaşımızın SQL injection sadece ASP için geçerli değildir. Veri tabanı ve SQL kullanan tüm web programlama dilleri için geçerlidir.

Bu açığı kapatmak için POST 'tan veya GET 'ten aldığınız bilgileri temizleyin. Nasıl mı?

Örnek PHP için:

[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]

diyelim...

haberid 'yi olduğu gibi çağırırsanız SQL injection kaçınılmazdır...

<?php

$haberid = intval($_GET['haberid']);

?>

dediğinizde

[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] UNION SELECT FROM bilmemne

şeklinde adresi değişseniz bile... $haberid 3 'e dönecektir.


veya...

[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]

Gibi bir adresiniz içeriyor varsayalım Bu noktada SQL injection yememek için

1- Scriptinizin initialize bölümüne

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
<?php /** * @author Nickolas * @date 12/07/2007 08:56:29 */ function deep_addslashes($gpc) { if (is_array($gpc)) { foreach ($gpc AS $var => $val) { if (is_array($val)) { deep_addslashes($val); continue; } $gpc["$var"] = addslashes($gpc["$var"]); } } else { $gpc = addslashes($gpc); } return $gpc; } if (@ini_get('register_globals') AND !@ini_set('register_globals', 0)) { trigger_error("Devam edebilmek icin <strong>php.ini</strong> dosyanizda 'register_globals' degerini 'Off' yapmalisiniz", E_USER_ERROR); exit; } @ini_set('magic_quotes_sybase', 0); @ini_set('set_magic_quotes_runtime', 0); $gotmagic = false; if (function_exists('get_magic_quotes_gpc') AND @get_magic_quotes_gpc()) { $gotmagic = true; } if ($gotmagic == false) { foreach (array('_POST', '_GET', '_REQUEST', '_COOKIE') AS $GPC) { $GLOBALS["$GPC"] = deep_addslashes($GLOBALS["$GPC"]); } } ?>

Kodlarını Girin.

Bu kod...

[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] OR UNION SELECT * FROM admin WHERE 'a' = 'a'

daki kodun Tek Tırnak ( ' ) karekterlerini (\') şeklinde getirecek ve SQL Injection dan kurulacaksınız...

2. İşlem

<?php

$kategori = trim($_GET['do']);

mysql_query("SELECT * FROM haber WHERE kategori = '$kategori'");
?>

şeklinde değil de...

<?php

$kategori = mysql_real_escape_string(trim($_GET['do']));

mysql_query("SELECT * FROM haber WHERE kategori = '$kategori'");

?>

Şeklinde kullanın. mysql_real_escape_string fonksonu bir nevi addslashes görevi yapar... ve ayrımlarda kullandığı Tek Tırnak karekterini operatörlükten string e indirger..

 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları eglen sohbet reklamver