استخدم مشكلة تشفير الأحرف لتجاوز حقن SQL لـ mysql_real_escape_string ()
على الرغم من أن
$login = mysql_real_escape_string(GetFromPost('login'));
$password = mysql_real_escape_string(GetFromPost('password'));
$sql = "SELECT * FROM table WHERE login='$login' AND password='$password'";
يبدو هذا الرمز آمنًا ، ولكن قد يتم استغلاله بسبب حالة ترميز مجموعة الأحرف.
طريقة الهجوم:
تعتمد الهجمات على الخطوات التالية:
إرسال الاستعلام: تصبح الحمولة النافعة التي هربت جزءًا من عبارة SQL ، مما يسمح للمهاجم بتجاوز الحماية المتوقعة.
mysql_set_charset () الحالة.
كنتيجة لـ:
يمكن لهذا الهجوم تجاوز بيان المعالجة المسبقة لـ PDO حتى لو تم تعطيل بيان المعالجة المسبقة المحاكاة.
علاج:
استخدم مجموعات الأحرف غير القابلة للخلايا ، مثل UTF8MB4 أو UTF8 ، للتخفيف من هذه المشكلة. يوفر Enable No_backSlash_escapes وضع SQL أيضًا الحماية.
مثال آمن:
قم دائمًا بتعيين مجموعة الأحرف بشكل صحيح باستخدام mysql_set_charset ()
أو معلمات تعيين أحرف DSN من PDO. تصريحات المعالجة المسبقة في MySQLI هي أيضا محصنة ضد هذا الهجوم.
ختاماً:
بينما عادةً ما يوفر mysql_real_escape_string () حماية قوية ، من المهم أن تكون على دراية بحالات الحافة المحتملة لضمان الدفاع الكامل ضد حقن SQL.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3