هل تعرف ماذا تعني sql-injection

ببساطة هذا مثال ل sql تسجيل دخول

select * from users where id = {$_POST['name']}

في هذا المثال مُبرمج ليس لديه خبرة تخيل المستخدم ادخل هذا النص

0 or 0 = 0

سيكون الاستعلام هكذا

select * from users where id = 0 or 0 = 0

بالطبع 0 = 0 تخيل الدخول هنا للوحة التحكم سيستطيع المستخدم

وبالنسبة للنصوص يُمكن وضع ' لإنهائها لذا المكتبة لن تفهم عن ماذا تستعلم وتقوم بالترقيع عليك أنت بحماية نفسك.

مشكور أخي

ولكن يرجى قراءة السؤال مرة أخرى :3

اخي انا افهم مذا تعني ثغرة الحقن

و نستخدم دالة addslashes او mysql_real_escape_string للحماية بوضع سلاش

اتمتى ان تكون فهت قصدي :3

نصيحتي لك إستخدم PDO فهو أكفأ في هذه الحالة و يوفر واجهة برمجية واحدة لأكثر من مدير قاعدة بيانات

مشكور, و السؤال هنا يتجدد هل PDO محمية من الثغرات المتعلقة بقاعدة البيانات ؟

نعم و لكن تحتاج إلي مبرمج فطن

  • إستخدامك للـ mysqli لن يحميك من ثغرة sql injection

  • لحماية تطبيقاتك من ثغرات الـ sql injection عليك فلترة المدخلات التي تستخدمها في الإستعلامات بشكل جيد، يمكنك هذا من خلال التعابير القياسية Regular expressions

للأجابة المحددة على سؤالك،

لا ليس بمجرد استخدام MySQLi بل باستخدام طريقة Prepare سواء في MySQLi او PDO تساعد على الحماية من Injections طبعاً مع bound للمتغيرات المدخلة من قبل المستخدم. وآخر ما توصلت اليه شخصياً (انك لاتحتاج لوضع يا دالة اخرى للحماية من حقن قاعدة البيانات).

مثال على استخدام Prepare

http://codeshare.io/TPcmK

مشكور اخي, كنت اظن انه لا جديد في PDO :)

ووجدت أنه بالفعل خاصية bindParam أو bindValue فعالة جداً و رائعة في الحماية

شكراً على المساعدة

PHP

مجتمع مخصص للغة الـ PHP

3.32 ألف متابع