Hoşgeldin Ziyaretçi



Konuyu Oyla:
  • Toplam: 0 Oy - Ortalama: 0
  • 1
  • 2
  • 3
  • 4
  • 5
[Bilgi] SQL’de Kabus, SQL Injection!
#1
SQL injection denen method ile, veritabanınıza yetkisiz işlem yaptırılabilir. Bu yetkisiz işlemler ile, veritabanınızdaki bir tablo tamamen boşaltılabilir, veriler silinebilir veya veri eklenebilir, daha da kötüsü yazdığınız script bir yönetim paneline sahipse buraya izinsiz girişler olabilir.


SQL injection methodları farklılık gösterebilir, URL ile yapılabilir(GET)sitedeki formlar ile yapılabilir(POST). Temel mantığı ise, sizin yazdığınız SQL sorgularını safdışı bırakarak çalıştırılmak istenen sorguların çalıştırılmasıdır. Burada bu methodları tabi ki anlatmayacağım, bunun yerine PHP’de SQL injection’a karşı nasıl önlemler alabileceğimizi anlatacağım.

Basit bir SQL sorgumuz olsun, url ile gelen id’ye sahip makaleyi veritabanından seçelim.

PHP Kod:
Kod:
$query = mysql_query("SELECT * FROM makaleler WHERE id=$_GET['id']", $baglanti); 


Bu şekilde kullandığınızda, çok büyük bir tehlike içerisindesiniz demektir. Bu sorguyu güvenli hale getirmek için sprintf fonksiyonunu da kullanacağız(bunu sadece daha düzenli bir kod yazımı için kullanıyoruz) ve sorgumuzu aşağıdaki hale getireceğiz:

PHP Kod:
Kod:
$id = $_GET['id'];
    $id = get_magic_quotes_gpc() ? stripslashes($id) : $id;
    $id= function_exists("mysql_real_escape_string") ? mysql_real_escape_string($id) : mysql_escape_string($id);
    $query = mysql_query(sprintf("SELECT * FROM makaleler WHERE id='%s'", $id), $baglanti); 


Sorgumuzu buhale getirerek kimsenin SQL’imize dokunmamasını sağlamış oluyoruz.

Bir örnek daha vermek gerekirse;

PHP Kod:
Kod:
$query = mysql_query("INSERT INTO makaleler(baslik, icerik, yazan) VALUES ($_POST['baslik'], $_POST['icerik'], $_POST['yazan'])", $baglanti); 


yerine;

PHP Kod:
Kod:
function guvenliyap($value) { // kullandığımız kodları fonksiyon haline getirelim
$value = get_magic_quotes_gpc() ? stripslashes($value) : $value;
$value= function_exists("mysql_real_escape_string") ? mysql_real_escape_string($value) : mysql_escape_string($value);
return $value;
}

$query = mysql_query(sprintf("INSERT INTO makaleler(baslik, icerik, yazan) VALUES ('%s', '%s', '%s')", guvenliyap($_POST['baslik']), guvenliyap($_POST['icerik']), guvenliyap($_POST['yazan'])), $baglanti); 


kullanarak güvenliğimizi sağlamış oluyoruz.

Kısacası, URL veya POST ile gelen bütün verileri bir filtreden geçirerek, bu gelen verinin içinde bulunabilecek  işaretlerini \’ haline getiriyoruz. Böylece bu gelen verilerdeki zararlı işaretler, sorgumuzun içine karışmıyor ve SQL injection ile sitemize zarar vermek isteyen kişiler avuçlarını yalıyorlar. wink.gif
Cevapla
Teşekkür verenler:


Hızlı Menü:


Şu anda bu konuyu okuyanlar: 6 Ziyaretçi


10tl.net Destek Forumu -

Online Shopping App
Online Shopping - E-Commerce Platform
Online Shopping - E-Commerce Platform
Feinunze Schmuck Jewelery Online Shopping