PHP-daky PDO soraglarynyň problemalary

Bilşiňiz ýaly, SQL soraglary SQL-inýeksiýalaryna ýol berýär. PDO giňeldilmäsi inýeksiýalara garşy göreşmek üçin döredilendi, ýöne ýönekeý, deslapky ýagdaýda, ol muny etmeýär.

Mesele üstünde meseläni seredeliň. Bizde üýtgeýän ýere goşulýan aşakdaky sorag bolsun:

php<?php
  $sql = "SELECT * FROM users WHERE id=$id";
  $res = $pdo->query($sql);
?>

Üýtgeýänimiz bir ýerden gelýär diýeliň, mysal üçin, GET-parametriden. Ýönekeýleşdirmek üçin, ýöne, geliň diňe ony el bilen belirleýälim. Biz käbir san bahasyny gözläýäris, mysal üçin, şeýle:

php<?php
  $id = 1;
?>

Howply haker, ýöne, aşakdaky bahany geçirip biler (bizde role meýdany bar diýip hasaplaýarys):

php<?php
  $id = '-1 OR role="admin"';
?>

Şonuň üçin, biz aşakdaky soragy gözledik:

php<?php
  $sql = "SELECT * FROM users WHERE id=1";
  $res = $pdo->query($sql);
?>

Ýöne saýtyň administratyryny çykarýan aşakdaky soragy aldyk:

php<?php
  $sql = "SELECT * FROM users WHERE id=-1 OR role="admin"";
  $res = $pdo->query($sql);
?>

Munuň ýüze çykmazlygy üçin, PDO-da ýörite mehanizm öň görülýär, ona taýýarlanan soraglar diýilýär. Olar bilen biz indiki sapakda meşgullanarys.

Задание 1

Bilerek özüňiziň bazanyza SQL-inýeksiýa ýerine ýetiriň.