PHP Prepared Statements

PYRITHIONEs

Kıdemli Üye
17 Nis 2013
2,329
10
Arkadaşlar bu çok temel bir konu ancak belki bilmeyenler vardır.
Kod:
// hazırla ve veritabanına ekle
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);
Prepared statement yani üstteki örnek doğrudur ve SQL INJECTION'a engel olur. Altta vereceğim ikinci örnek ise yanlıştır. Bunun sebebi kullanıcadan $_GET[] yolu ile alınan değişkenlerin direkt olarak kullanılması ve prepared statement içinde kullanılmamasıdır.

Kod:
$count_query = 'SELECT COUNT(*) as num_rows from students where hidden=0 ';



$query = 'SELECT id, first_name, last_name, birth_date from students where hidden=0 ';



$filters = '';



if (  ! empty( $first_name ) || ! empty( $last_name ) ) {



  if ( isset( $_GET['first_name'] ) && ! empty( $_GET['first_name'] ) ) {

     $filters .= "AND first_name LIKE '%{$_GET['first_name']}%' ";

  }



  if ( isset( $_GET['last_name'] ) && ! empty( $_GET['last_name'] ) ) {

     $filters .= "AND last_name LIKE '%{$_GET['last_name']}%' ";

  }

}



$page  = $_GET['page'] ?? 1;

$query .= $filters . ' LIMIT 5 OFFSET ' . ( $page - 1 ) * 5;
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.