ثغرات الـ SQL Injecton في PDO

Basel • منذ 6 سنوات

السلام عليكم ورحمة الله وبركاتة

عندي سؤال بخصوص الـ PDO SQL

هل هي آمنه ومافيها ثغرات SQL Injection

يعني لو استخدم

$sql = $mysqlcon->query("SELECT * FROM $db_name.Users WHERE UID = '$user_id'");

وجاء واحد ولعب بمتغير $user_id هل ممكن تضبط معه الثغره ؟

واذا مو آمنه وش الحل هل فيه طريقة اخرى لاستخدام SQL بدون ثغرات

وشكراً لكم ..

كلمات دليلية: pdo php

الإجابة الصحيحة

عمار الخوالدة • منذ 6 سنوات

بهذه الطريقة نعم هي غير آمنة ويمكن التلاعب بقيمتها،
الطريقة الأكثر أمانا سواء في PDO أو في غيرها هو استخدام Prepared Statements بحيث تقوم تلقائيا بعمل Escape لجمل SQL.

فحتى لو قام أحدهم بمحاولة ادخال كود SQL ضمن جملة تخزين مثلا في محاولة لاختراقك سيتم تخزين كود ال SQL هذا في قاعدة البيانات ( تتم معاملته كنص ولا يتم تنفيذه )، كذلك سيقوم بالبحث عنه أو تنفيذ الشرط باعتباره نص عادي String في حال كان ضمن جملة Where كما في المثال الذي وضعته في سؤالك.

للاستزادة أكثر عن الموضوع إليك هذا الرابط من التوثيق الرسمي ل PHP

وشاهد هذا المقال الرائع للتعرف على بعض الثغرات الشائعة:


تأمين سكربت php من أهم الثغرات

 

* المقال قديم ويستخدم الـ Prepared Statments الخاصة بدوال mysql القديمة، لكن الفكرة نفسها تقريبا.

الإجابات (3)

عمار الخوالدة • منذ 6 سنوات
الإجابة الصحيحة

بهذه الطريقة نعم هي غير آمنة ويمكن التلاعب بقيمتها،
الطريقة الأكثر أمانا سواء في PDO أو في غيرها هو استخدام Prepared Statements بحيث تقوم تلقائيا بعمل Escape لجمل SQL.

فحتى لو قام أحدهم بمحاولة ادخال كود SQL ضمن جملة تخزين مثلا في محاولة لاختراقك سيتم تخزين كود ال SQL هذا في قاعدة البيانات ( تتم معاملته كنص ولا يتم تنفيذه )، كذلك سيقوم بالبحث عنه أو تنفيذ الشرط باعتباره نص عادي String في حال كان ضمن جملة Where كما في المثال الذي وضعته في سؤالك.

للاستزادة أكثر عن الموضوع إليك هذا الرابط من التوثيق الرسمي ل PHP

وشاهد هذا المقال الرائع للتعرف على بعض الثغرات الشائعة:


تأمين سكربت php من أهم الثغرات

 

* المقال قديم ويستخدم الـ Prepared Statments الخاصة بدوال mysql القديمة، لكن الفكرة نفسها تقريبا.

Ali Majrashi • منذ 6 سنوات

وعليكم السلام ورحمة الله وبركاته 

ماقصر عمار اجابك اجابة ممتازه وزيادة على كلام عمار هنا درس لي اشرح فيها طريقة استخدام Prepared Statements سواء باستخدام PDO او MySQLi Object-Oriented 

https://3alam.pro/index.php/ali-majrashi/series/mysql/lessons/prepared-statements

المهم بعد تخزين البيانات في قاعدة البيانات بهذه الطريقة وعند الرغبة بعرضها للمستخدم ان قوم بعمل escape للمحتوى قبل عرضه وحتى تضمن انه لن يتم تنفيذ اي كود مخزن للمستخدم عند العرض فالحماية تكون من جهتين عند محاولة تخزين البيانات وعند محاولة جلب البيانات من القاعدة وعرضها للمستخدم

Basel • منذ 6 سنوات

شكراً لكم جميع <3

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !