منع حقن SQL في PHP
إذا تم إدراج إدخال المستخدم دون تحديد في استعلام SQL ، يصبح التطبيق عرضة لهجمات حقن SQL ، كما في المثال أدناه:$variable = $_POST['input_utilisateur'];في هذا المثال، يمكن للمستخدم إدخال < span style = "لون الخلفية: #f3f3f3; عائلة الخط: " ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >القيمة") ؛ إسقاط الجدول الجدول ؛--')< / span> . يصبح الاستعلام:
mysql_query("تدرج في قيم 'الجدول' ('العمود') ('$variable')")؛
< pre class = "prettyprint lang-php" >mysql_query ("إدراج في" الجدول "('العمود') القيم ('القيمة'); جدول إسقاط ؛--')
< / pre>
هدف المتسلل هو تعديل استعلام SQL حتى يتمكن من قراءة المعلومات المخفية أو إجراء أي عملية أخرى (قراءة ، تعديل ، حذف). في هذا المثال ، تتم إزالة الجدول من قاعدة البيانات.
هذا النوع من العيوب هو الأكثر انتشارا وخطورة ، وإذا كانت التعليمات البرمجية الخاصة بك غير آمنة ، فسيكون الخطر هائلا.
الحل لعيوب حقن SQL هو استخدام الاستعلامات المعدة أو الاستعلامات ذات المعلمات. التحضير للتنفيذ ، يتم إرسال الاستعلام إلى خادم قاعدة البيانات وإجراء فحص بناء الجملة. باستخدام هذه الطريقة ، من المستحيل على المتسلل حقن SQL.
لهذا ، لديك ثلاثة خيارات:
1- استخدام PDO:
< pre class = "prettyprint lang-php" >$statement = $pdo-> إعداد ("حدد * من المسؤول حيث الاسم =: الاسم") ؛ < / >< / >$statement > تنفيذ (صفيف ("الاسم" = > $nom)) ؛
foreach ($statement ك $row) {
// افعل شيئا
}
< / pre>2- باستخدام MySQLi:
< pre class = "prettyprint lang-php" >$statement = $dbConnection-> إعداد ("حدد * من المسؤول حيث الاسم = ؟") ؛ < / >$statement > bind_param ('s' ، $nom) ؛ < / >< / >$statement > تنفيذ();
$result = $statement-> get_result();
بينما ($row = $result-> fetch_assoc()) {
// افعل شيئا
}
3- استخدام نمط الطريقة < / span >< span style = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >< نمط الامتداد = "لون الخلفية: أبيض ؛" >PHP < / span>mysql_real_escape_string< / a>< / span>
PHP لديها طريقتها الخاصة لإصلاح هذه الثغرة الأمنية ، ولكن تجدر الإشارة إلى أن الطريقتين السابقتين أكثر فعالية. < span style = "لون الخلفية: #f3f3f3; عائلة الخط: " ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >mysql_real_escape_string< / سبان> يأخذ سلسلة سيتم استخدامها في استعلام MySQL ويعيد نفس سلسلة الأحرف التي تم الهروب منها من أي حقن SQL. يتم استبدال الحصص (') ب \'. تتطلب هذه الوظيفة أن تكون متصلا بالفعل بقاعدة البيانات لاستخدامها.
$nom = "' OR 1'";
$nom = mysql_real_escape_string ($nom);
$query = "حدد * من المسؤول حيث الاسم = '$nom'";
echo "تم تجنب الحقن: < BR / > ". $query . "< BR / > ";
$name_vul = "'; حذف من المسؤول حيث 1 أو الاسم = '"؛
$name_vul = mysql_real_escape_string ($name_vul) ؛
$query_vul = "حدد * من المسؤول حيث الاسم = '$nom'";
echo "تم تجنب الحقن: < BR / > ". $query_vul;
< / pre>
المراجع:
https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php< / a>