İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

SQL Injection Saldırılarına Önlem

Azat Metin

0
İyinet Üyesi
Katılım
4 Kasım 2010
Mesajlar
514
Reaction score
5
Konum
Diyarbakır
SQL Injection saldırıları ile neredeyse herkesin başı dertte büyük sistemler SQL Injection ile çok kolay anasını ağlatabilmektedirler bende bir nebzede olsa kabak gibi duran SQL Injection saldırısını önlemeyi anlatacağim.
Örnek olarak bir sorgu alalım ben projelerimde kullandıgım değerlerden örnek vericem


$_POST'a gelen değerler çok önemlidir çünki mysqldeki değerler ile karşilaştirilacaktir..

PHP:
$sifre=$_POST['sifre']);
$sifre=mysql_query("select * from yonetici where `id`='$sifre'");
mysql_num_rows($kontrolet)
Böyle birşey kullanmak tamamen bir hatadır çünki SQL Injection yapacak arkadaşin ` işareti olusturmasina gerek
bırakmadiniz böylece SQL ınjection saldırıları ile USER ve PASSWORD
bilgileriniz SQLden çekilebilir bunu önlemek ise basittir

PHP:
$sifre=$_POST['sifre']);
$sifre=mysql_query("select * from yonetici where id='$sifre'");
mysql_num_rows($kontrolet)


böyle yapildiği taktirde SQL açiği oluşması için `gerekliliğini belirttik..` önlemek için $_POST a bunları yapmak yeterli olcaktir.


PHP:
$sifre=mysql_real_escape_string(htmlspecialchars($_POST['sifre']));
$sifre=mysql_query("select * from yonetici where id='$sifre'");
mysql_num_rows($kontrolet)



ysql_query de id sifre karşilaştirmasini böyle yaparsak arkadaşın ` işareti olusturması kosulunu koruz daha sonra mysql_real_escape_string fonksiyonu kullandiğimiz için arkadaş ne zaman ` oluşturmaya kalksa babayı alıcaktir :hmmm:

Umarım kendimi ifade edebilmişimdir.
Konu ile ilgili sorulara herzaman açığım.
Saygılarımla..
Azat Metin / www.yasalhost.com
[email protected]
 

r4x

0
İyinet Üyesi
Katılım
18 Mart 2011
Mesajlar
70
Reaction score
1
veyahut şu şekilde olabilir

PHP:
$id = $_GET["id"];

// get id yi sayı olarak farz edelim

if (is_numeric($id)){ // $id değişkeni sayı ise birşey yapma
}
else { //değilse Anti SQL Inection yazdır ekrana
echo "Anti SQL Injection";
}
 

Hakan Damar

0
İyinet Üyesi
Katılım
18 Haziran 2011
Mesajlar
740
Reaction score
6
Konum
USA
CogeIgniter framework'ü kullanırsanız bunları o sizin yerinize yapıyor :)

Framework'lere karşı çok sıcak yaklaşmam ama CI'ı bir incelemenizi öneririm. Gerçekten öğrenilmesi kolay ve kullanımı basittir. Sizi bu tür object veya method'larla uğraşmak yerine işinize yoğunlaşmanızı sağlıyor.
 

Caesar

0
İyinet Üyesi
Katılım
5 Haziran 2006
Mesajlar
1,894
Reaction score
7
Daha kullanışlı hale getirelim;

PHP:
function temizle($deger, $utf=false) {
	$deger = strip_tags ( $deger );
	$deger = trim ( $deger );
	$deger = mysql_escape_string ( $deger );
	return $deger;
}

function dizi_temizle($deger) {
	foreach ($deger as $key => $value) {
		if (!is_array($deger[$key])) {
			$deger[$key]=temizle($value);
		} else {
			$deger[$key]=dizi_temizle($deger[$key]);
		}
	}
	return $deger;
}

Tek değer için;
PHP:
$deger=temizle($_POST['deger']);

Çoklu postlarda:
PHP:
$form=dizi_temizle($_POST);
//$_POST ile gelen tüm değerler temizlendi örn: $form[id],$form[deger],$form[deger1]
 

emekli

0
İyinet Üyesi
Katılım
22 Mart 2013
Mesajlar
147
Reaction score
1
ben artık mysql yerine PDO kullanıyorum,
değişkenleri parametre olarak eklediğimiz için çok güvenli oluyor.
 

PhpCode

0
İyinet Üyesi
Katılım
5 Temmuz 2013
Mesajlar
122
Reaction score
0
Saldırıları önlemek için yapılacaklar listesi oluştursak buradan çine yol olur. Sizleri paylaştığınız yararlı bilgilerden dolayı tebrik ediyorum .Teşekkürler iyi çalışmalar
 

quardian

0
İyinet Üyesi
Katılım
18 Nisan 2012
Mesajlar
0
Reaction score
0
Konum
Elazığ
Ben editlediğim bir scripte iletişim formu ekledim ancak hiç bir önlem olmadığı için sıkıntı olabileceği için captcha eklemeyaptım benim gibi çokta anlamayan biri için biraz zor oldu ama sorunsuz çalışıyor şimdi :D
 

soulmy

0
İyinet Üyesi
Onaylı Üye
Katılım
1 Aralık 2010
Mesajlar
955
Reaction score
8
Konum
Samsun
Ben editlediğim bir scripte iletişim formu ekledim ancak hiç bir önlem olmadığı için sıkıntı olabileceği için captcha eklemeyaptım benim gibi çokta anlamayan biri için biraz zor oldu ama sorunsuz çalışıyor şimdi :D

Siz olayı çok farklı algılamışsınız.

Captcha, botlara karşı spamı önlemek için yapılır. Burada anlatılan olay ise SQL Injection açığı. İkisi birbirinden çok farklı...
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Backlink ve Tanıtım Yazısı için iletişime geçmek için Skype Adresimiz: .cid.1580508955483fe5

Üst