lostyazilim
tr.link

Php "is_numeric" Güvenilirliği

5 Mesajlar 1.020 Okunma
lstbozum
tr.link

apollon1 apollon1 WM Aracı Kullanıcı
  • Üyelik 21.10.2018
  • Yaş/Cinsiyet 30 / E
  • Meslek Öğrenci
  • Konum İstanbul Anadolu
  • Ad Soyad A** T**
  • Mesajlar 67
  • Beğeniler 52 / 29
  • Ticaret 0, (%0)
Phpde kullanıcıdan id veya rakamsal herhangi bir ifade alırken is_numeric'den geçiriyorum. Sizce bu fonksiyon olduğu halde sql injection oluşturulabilir mi? İnternette pek bişey göremedim.

Örnek bir betik:


$kid = $_GET["id"];
if (is_numeric($kid)){
$sorgu1 = $db->prepare('SELECT * FROM urunler WHERE kategori_id ='.$kid);
$sorgu1->execute();
$sonuc = $sorgu1->fetchAll(PDO::FETCH_ASSOC);}

?>
 

 

wmaraci
reklam

carasar carasar All ızz well... Kullanıcı
  • Üyelik 29.10.2016
  • Yaş/Cinsiyet 33 / E
  • Meslek Öğretmen
  • Konum Konya
  • Ad Soyad O** K**
  • Mesajlar 1116
  • Beğeniler 499 / 498
  • Ticaret 16, (%100)
get için tek sayı kontrolü yeterli değil, html,script ve php kodlarını da engellemniz gerekiyor. Bu kontrolleri sağladıysanız şu fonksiyonu da kullanarak tam sayı kontrolünü de yapabilirsiniz.

is_int($_GET["id"])
apollon1

kişi bu mesajı beğendi.

Mango Mango WM Aracı Kullanıcı
  • Üyelik 23.11.2015
  • Yaş/Cinsiyet 30 / E
  • Meslek Front-End Developer
  • Konum Bursa
  • Ad Soyad N** K**
  • Mesajlar 311
  • Beğeniler 8 / 81
  • Ticaret 0, (%0)
HTML, Javascript ve PHP kodlarını da engellediğinizi düşünürsek, is_numeric yeterlidir.
apollon1

kişi bu mesajı beğendi.

wpuzman wpuzman WordPress Developer Kullanıcı
  • Üyelik 13.01.2017
  • Yaş/Cinsiyet 33 / E
  • Meslek Yazılım
  • Konum Trabzon
  • Ad Soyad B** M**
  • Mesajlar 2771
  • Beğeniler 293 / 949
  • Ticaret 33, (%100)
if (int($sayi) > 0) şeklinde de yapılabilir. Genelde böyle kontrol ediliyor.
 

 

wmaraci
wmaraci

saintx saintx .... Kullanıcı
  • Üyelik 19.07.2012
  • Yaş/Cinsiyet 44 / E
  • Meslek ...
  • Konum Diğer
  • Ad Soyad .** .**
  • Mesajlar 148
  • Beğeniler 1 / 40
  • Ticaret 2, (%100)


$data = [ 'ali' , 3.14 , 9 ] ;

foreach ( $data as $value ) {
/**
* preg_match fonksiyonundan dönen değer sıfırdan büyükse,
* giriş değeri sayısal olarak kabul edebilirsin.
*/
var_dump ( $value , 0 < preg_match ( '/^[0-9]+$/u' , $value ) ) ;
}


Çevrimiçi çalıştırabileceğin hali -> https://3v4l.org/VXM0F
 

 

Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al