حماية من 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'));

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

قرات احدى المقالات انه يوجد عده طرق لتخطي داله PDO->prepare وتنفيذ كود SQL خبيث ... ولذالك دائما انصح ان تستخدم دوال فلتره المدخلات والمخرجات بنفسك!

لكن لحماية script kids من الافضل ؟ فالطرية الثانية تدخل بيانات على شكل مصفوفة في دالة execution

لذالك دائما انصح ان تستخدم دوال فلتره المدخلات والمخرجات بنفسك!

ممكن تشرح اكثر ؟

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

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

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

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