ثغرات الـ SQL Injecton في PDO
السلام عليكم ورحمة الله وبركاتة
عندي سؤال بخصوص الـ PDO SQL
هل هي آمنه ومافيها ثغرات SQL Injection
يعني لو استخدم
$sql = $mysqlcon->query("SELECT * FROM $db_name.Users WHERE UID = '$user_id'");
وجاء واحد ولعب بمتغير $user_id هل ممكن تضبط معه الثغره ؟
واذا مو آمنه وش الحل هل فيه طريقة اخرى لاستخدام SQL بدون ثغرات
وشكراً لكم ..
الإجابة الصحيحة
بهذه الطريقة نعم هي غير آمنة ويمكن التلاعب بقيمتها،
الطريقة الأكثر أمانا سواء في PDO أو في غيرها هو استخدام Prepared Statements بحيث تقوم تلقائيا بعمل Escape لجمل SQL.
فحتى لو قام أحدهم بمحاولة ادخال كود SQL ضمن جملة تخزين مثلا في محاولة لاختراقك سيتم تخزين كود ال SQL هذا في قاعدة البيانات ( تتم معاملته كنص ولا يتم تنفيذه )، كذلك سيقوم بالبحث عنه أو تنفيذ الشرط باعتباره نص عادي String في حال كان ضمن جملة Where كما في المثال الذي وضعته في سؤالك.
للاستزادة أكثر عن الموضوع إليك هذا الرابط من التوثيق الرسمي ل PHP
وشاهد هذا المقال الرائع للتعرف على بعض الثغرات الشائعة:
تأمين سكربت php من أهم الثغرات
* المقال قديم ويستخدم الـ Prepared Statments الخاصة بدوال mysql القديمة، لكن الفكرة نفسها تقريبا.
الإجابات (3)
بهذه الطريقة نعم هي غير آمنة ويمكن التلاعب بقيمتها،
الطريقة الأكثر أمانا سواء في PDO أو في غيرها هو استخدام Prepared Statements بحيث تقوم تلقائيا بعمل Escape لجمل SQL.
فحتى لو قام أحدهم بمحاولة ادخال كود SQL ضمن جملة تخزين مثلا في محاولة لاختراقك سيتم تخزين كود ال SQL هذا في قاعدة البيانات ( تتم معاملته كنص ولا يتم تنفيذه )، كذلك سيقوم بالبحث عنه أو تنفيذ الشرط باعتباره نص عادي String في حال كان ضمن جملة Where كما في المثال الذي وضعته في سؤالك.
للاستزادة أكثر عن الموضوع إليك هذا الرابط من التوثيق الرسمي ل PHP
وشاهد هذا المقال الرائع للتعرف على بعض الثغرات الشائعة:
تأمين سكربت php من أهم الثغرات
* المقال قديم ويستخدم الـ Prepared Statments الخاصة بدوال mysql القديمة، لكن الفكرة نفسها تقريبا.
وعليكم السلام ورحمة الله وبركاته
ماقصر عمار اجابك اجابة ممتازه وزيادة على كلام عمار هنا درس لي اشرح فيها طريقة استخدام Prepared Statements سواء باستخدام PDO او MySQLi Object-Oriented
المهم بعد تخزين البيانات في قاعدة البيانات بهذه الطريقة وعند الرغبة بعرضها للمستخدم ان قوم بعمل escape للمحتوى قبل عرضه وحتى تضمن انه لن يتم تنفيذ اي كود مخزن للمستخدم عند العرض فالحماية تكون من جهتين عند محاولة تخزين البيانات وعند محاولة جلب البيانات من القاعدة وعرضها للمستخدم
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !