PHP'de mysqli eklentisini kullanırken mysqli_query methodunda sql injecktion için önlem alınmış mıdır yoksa mysql_query methodu gibi önlemsiz midir bunu merak ettim. Bir de mysqli_query önlemsizse sadece mysqli_prepare kullanırsak önlem almış olur muyuz mysql_escape_string gibi bir fonksiyonu ayrıca kullamamıza gerek var mı. Teşekkür ederim.

soruldu: 11 Haz '13, 11:23

orhangazi's gravatar image

orhangazi
132172126
cevap kabul oranı: 0%

değiştirildi: 15 Haz '13, 01:20

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183

Prepared statements tercih edersen bir nebze olsun injectiondan kurtulmuş olursun. PHP dökümanında prepared statements olarak arattırırsan örnekler karşına gelicektir.

(11 Haz '13, 11:40) Oğuz Çelikdemir O%C4%9Fuz%20%C3%87elikdemir's gravatar image

Birde, bir örneğini falan koysaydın elindeki, en azından fikir yürütebilirdik.

(11 Haz '13, 11:41) Oğuz Çelikdemir O%C4%9Fuz%20%C3%87elikdemir's gravatar image

mesela kullanıcı girişi yapılırken.
$sorgu = mysqli_query($baglan,"select id from tabloadi where kadi='$kadi' and ksifresi='$ksifresi'");
gibi. Ben prapare kullandım gördüğüm videolarda, örneklerde sql injectiondan önemli ölçüde koruduğu söyleniyordu teşekkür ederim. sadece prepare'a gerek var mı mysqli nin mysqli_query fonksiyonunda sql injectiona karşı önlem alındı mı diye merak etmiştim.

(11 Haz '13, 11:46) orhangazi orhangazi's gravatar image

Dobra dobra, işin uzmanı değilim açıkçası. Ben genelde prepared statements kullanıyorum, cache özelliğinden falan faydalanmak için. Kısa bir göz gezdirmeden sonra, örneğin :

mysqli_query($link,
          'SELECT Name FROM User WHERE UserID = '.$_POST['UserID']
          );

gibi bir kodun sql injectiona açık olduğu söyleniyor. Burada POST tan gelen veriyi doğrudan query içine basıyor, seninkide sanırım aynı.

Kurtulabilmek için yine mysqli_real_escape_string funksiyonunu tavsiye ediyorlar.

mysqli_query( $link,
          'SELECT Name FROM User WHERE UserID = \\''.
              mysqli_real_escape_string($link, $_POST['UserID']).
              '\\''
          );
permanent link

cevaplandı: 11 Haz '13, 15:00

O%C4%9Fuz%20%C3%87elikdemir's gravatar image

Oğuz Çelikdemir
2.0k52234
cevap kabul oranı: 13%

Teşekkür ederim. Ben örnek olsun diye düz sorgu yazıp gösterdim. htmlentities kullandım ama türkçe karakterlerde sorun olduğu için sadece htmlspecialchars kullanmayı uygun gördüm şimdilik bu kadarı yeterli benim için. ilginize teşekkür ederim.

(11 Haz '13, 15:08) orhangazi orhangazi's gravatar image

SQL Injection herhangi bir fonksiyona bağlı değildir. Kullanıcıdan gelen her bilgiyi kontrol etmen gerekiyor. SQL Injectionla ilgili detaylı bilgi bulabileceğin bazı kaynakların linkleri:

http://php.net/manual/en/security.database.sql-injection.php

https://www.owasp.org/index.php/SQL_Injection

http://www.zskblog.com/detay.aspx?id=22

http://forum.iyinet.com/guvenlik/129317-sql-injection-korunma-yontemleri.html

permanent link

cevaplandı: 12 Haz '13, 01:30

kodmanyagha's gravatar image

kodmanyagha
3.1k132852
cevap kabul oranı: 15%

değiştirildi: 12 Haz '13, 01:30

PDO kullanarak kökten injection problemlerinden kurtulabilirsiniz.

http://php.net/manual/tr/pdo.connections.php

Yukarıdaki örneği deneyebilirsiniz.

permanent link

cevaplandı: 13 Şub '15, 07:46

ydlgr's gravatar image

ydlgr
1164410
cevap kabul oranı: 0%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×168
×144
×4
×1

Soruldu: 11 Haz '13, 11:23

Görüntüleme: 1,143 kez

Son güncelleme: 13 Şub '15, 07:46

powered by BitNami OSQA