التخطي إلى المحتوى الرئيسي

المشاركات

عرض المشاركات من أكتوبر, ٢٠١٥

كيف تضع المتغيرات في جملة SQL داخل البرنامج؟

من الأخطاء التي تبدو لي شائعة هي كيفية تكوين جمل SQL داخل البرامج، أصادف سطورا يكتبها بعض المبرمجين كالتالي: "select * from users where UPPER(uname)= UPPER('".$uname."')" هذه الطريقة في ادخال القيم إلى جملة SQL هي طريقة خطرة للغاية، فهي أولا تعيق عمل البرنامج عند ادخال أحرف معينة (أحد من عرفتهم حل المشكلة باخبار المستخدم بأن ادخال هذه الحروف ممنوع!)، وثانيا، وهو الأهم: أنها تترك قاعدة بياناتك عرضة للاختراق، أو التدمير، إذ يمكن للمخترق، وبمجرد اكتشافه للثغرة أن يقوم باغلاق جملة SQL الخاصة بك واضافة جملة جديدة كما يشاء، افترض مثلا أن قيمة المتغير uname (المدخلة بواسطة المستخدم) كالتالي: ');DROP TABLE users; -- في تلك الحالة تصبح جملة SQL الكاملة المنفذة بواسطة البرنامج هي: "select * from users where UPPER(uname)= UPPER('' );DROP TABLE users; -- ')" وبالطبع، تكون النتيجة هي محو بيانات المستخدمين "إن كان البرنامج يملك صلاحية تنفيذ الأمر". تسمى هذه الطريقة SQL Injection  وهي دائما فعالة مع البرامج المكتوبة بهذه