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
$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
$id = 1;
?>
Howply haker, ýöne, aşakdaky bahany geçirip biler
(bizde role meýdany bar diýip hasaplaýarys):
<?php
$id = '-1 OR role="admin"';
?>
Şonuň üçin, biz aşakdaky soragy gözledik:
<?php
$sql = "SELECT * FROM users WHERE id=1";
$res = $pdo->query($sql);
?>
Ýöne saýtyň administratyryny çykarýan aşakdaky soragy aldyk:
<?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.
Bilerek özüňiziň bazanyza SQL-inýeksiýa ýerine ýetiriň.