İyinet'e Hoşgeldiniz!

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

Kayıt Ol!

SQL Injection

desoLate

0
İyinet Üyesi
Katılım
14 Haziran 2006
Mesajlar
220
Reaction score
0
sayfa.php?id=1 adresinde sql injection önlemek için sayfa içinde alınan id'yi $id=htmlspecialchars($id); şeklinde almak yeterli midir ? Yeterli değilse başka neler yapmak gerekir ?
 

iyinet

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,028
Reaction score
63
Konum
Sakarya
sayfa.php?id=1 adresinde sql injection önlemek için sayfa içinde alınan id'yi $id=htmlspecialchars($id); şeklinde almak yeterli midir ? Yeterli değilse başka neler yapmak gerekir ?

PHP:
$id = mysql_real_escape_string($_GET['id']);
 

atay

0
İyinet Üyesi
Katılım
29 Ekim 2005
Mesajlar
3,592
Reaction score
37
mysql_real_escape_string'in ne farkı var?
 

iyinet

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,028
Reaction score
63
Konum
Sakarya
mysql_real_escape_string'in ne farkı var?

Neyden ne farki var?
Lutfen soru sorarken sizin o anda dusunduklerinizin, bizim o anda dusunduklerimiz ile ayni olamayacagini gozonunde bulundurarak sorularinizi detayli yaziniz.
 

desoLate

0
İyinet Üyesi
Katılım
14 Haziran 2006
Mesajlar
220
Reaction score
0
herhalde, htmlspecialchars();'ın mysql_real_escape_string'den farkını sormak istemiş.. Lütfen biraz detaylı olarak açıklar mısınız iyinet?
 

Caesar

0
İyinet Üyesi
Katılım
5 Haziran 2006
Mesajlar
1,894
Reaction score
7
htmlspecialchars html satirlarini yok eder ama ' " UNION tarzi injection lar html tag değildir.
 

atay

0
İyinet Üyesi
Katılım
29 Ekim 2005
Mesajlar
3,592
Reaction score
37
Neyden ne farki var?
Lutfen soru sorarken sizin o anda dusunduklerinizin, bizim o anda dusunduklerimiz ile ayni olamayacagini gozonunde bulundurarak sorularinizi detayli yaziniz.

birbiri arasındaki fark nedir yani, ekstradan ne yapıyor?

manual'den baktım,

mysql_real_escape_string() calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', " and \x1a.

diyordu görevi için. htmlspecialchars'de bu görevi yapıyor sayılır, <, >, ', ", ve & karakterlerini html koda dönüştürüyor. bu karakterleri kullanmadan sql injeksiyon yapılabilir mi ?
 

Angelo

0
İyinet Üyesi
Katılım
13 Aralık 2004
Mesajlar
9,603
Reaction score
111
Konum
AZ
Bu işi hayatınızda sorun olmaktan çıkartmak için, include ettiğiniz fonksiyon veya konfigurasyon dosyanıza bir fonksiyon ekleyin. Mesela;

PHP:
function sanitize () {
  
  foreach ($_POST as $key => $value) {
  $_POST[$key] = mysql_real_escape_string($value);
  }

  foreach ($_GET as $key => $value) {
  $_GET[$key] = mysql_real_escape_string($value);
  }

return 1;
}

gibi.

Sonra her dosyanın başına sanitize(); yapıp bütün sayfalardaki post ve get verilerini temizleyin. Bunu en baştan yaparsanız sonra tek tek uğraşmazsınız.
 

Crash

0
İyinet Üyesi
Katılım
3 Aralık 2004
Mesajlar
0
Reaction score
0
$id=intval($_GET['id']);
id değerini her zaman için tam sayı olarak alır.
 

iyinet

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,028
Reaction score
63
Konum
Sakarya
$id=intval($_GET['id']);
id değerini her zaman için tam sayı olarak alır.

intval da kullanmayin.
Bakin intval ile girilen degerler nasil baska bir deger olabiliyor
PHP:
echo intval(4.2);                    // 4
echo intval(042);                    // 34
echo intval('042');                  // 42
echo intval(1e10);                    // 1410065408
echo intval('1e10');                  // 1
echo intval(0x1A);                    // 26
echo intval(420000000000000000000);  // 0
echo intval('420000000000000000000'); // 2147483647

En guvenilir yontem:

PHP:
if($id == (int) $id) { 
   islem yap... 
} else { 
   islem yapma... 
}
 

Crash

0
İyinet Üyesi
Katılım
3 Aralık 2004
Mesajlar
0
Reaction score
0
intval da kullanmayin.
Bakin intval ile girilen degerler nasil baska bir deger olabiliyor
PHP:
echo intval(4.2);                    // 4
echo intval(042);                    // 34
echo intval('042');                  // 42
echo intval(1e10);                    // 1410065408
echo intval('1e10');                  // 1
echo intval(0x1A);                    // 26
echo intval(420000000000000000000);  // 0
echo intval('420000000000000000000'); // 2147483647
farkeden ne oldu ? senin başta yaptığın kontrolü ben sql de yaptırıyorum.Sonucta güvenlimi değilmi ?
senin aşağıda yazdığın rakammıdır değilmidir önergesine 42222000000 gibi bi rakam yazsam benimkinden farklı bir sonucmu alacaksın ?
 
B

Baria

Misafir
Ben id işlemlerinde is_numeric post işlemlerinde ise mysql_real_escape_string kullanıyorum.Hiç sorun yaşamadım.

is_numeric yada intval geçebilen bir kod var mı? varsa yazarmısınız?
 

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