حماية من SQL Injection في PDO

  • forra

ما هي افضل طريقة للحماية من الحقن

الطريقة الاولى :

/* Execute a prepared statement by passing an array of values */

$sql = 'SELECT name, colour, caloriesFROM fruit WHERE calories < :calories AND colour = :colour';

$sth = $dbh->prepare($sql);

$sth->execute(array(':calories' => 150, ':colour' => 'red'));

$red = $sth->fetchAll();

الطريقة الثانية

$sth = $dbh->prepare('SELECT name, colour, calories

FROM fruit
WHERE calories < ? AND colour = ?');

$sth->execute(array(150, 'red'));


فقط لا تستعمل "ترميز" Encoding غير utf8,ascii, latin1 و أنت %100 محمي من SQL Injection

و حتى لو حدث هذا في الأحلام أنك تستعمل ترميز آخر فسيبقى "نظريا" من الصعب جدا إستغلالها، وللأمان أكثر

إجعل ATTR_EMULATE_PREPARES في الـ PDO إلى false و ذلك بالطبع عبر دالة setAttribute و كن على أتم الإطمئنان..

إجابة مفصلة عن هذه "الثغرة" المحتملة