من الأخطاء التي تبدو لي شائعة هي كيفية تكوين جمل SQL داخل البرامج، أصادف سطورا يكتبها بعض المبرمجين كالتالي:
هذه الطريقة في ادخال القيم إلى جملة SQL هي طريقة خطرة للغاية، فهي أولا تعيق عمل البرنامج عند ادخال أحرف معينة (أحد من عرفتهم حل المشكلة باخبار المستخدم بأن ادخال هذه الحروف ممنوع!)، وثانيا، وهو الأهم: أنها تترك قاعدة بياناتك عرضة للاختراق، أو التدمير، إذ يمكن للمخترق، وبمجرد اكتشافه للثغرة أن يقوم باغلاق جملة SQL الخاصة بك واضافة جملة جديدة كما يشاء، افترض مثلا أن قيمة المتغير uname (المدخلة بواسطة المستخدم) كالتالي:
"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 وهي دائما فعالة مع البرامج المكتوبة بهذه الطريقة، فكتابة الكود بهذه الطريقة يقلل فعاليته ويخلق ثغرات أمنية خطرة.
والطريقة الصحيحة لادخال المتغيرات في جملة SQL بأمان، هي استخدام escaping functions، أو اضافة الحرف '\' قبل الأحرف الخاصة في نفس المتغير قبل ادخاله في الجملة.
مثال يمكن مراجعته عن تلك الدوال في php:
mysqli.real-escape-string.php
بيئة .NET:
system.data.sqlclient.sqlcommand.parameters.aspx
تسمى هذه الطريقة SQL Injection وهي دائما فعالة مع البرامج المكتوبة بهذه الطريقة، فكتابة الكود بهذه الطريقة يقلل فعاليته ويخلق ثغرات أمنية خطرة.
والطريقة الصحيحة لادخال المتغيرات في جملة SQL بأمان، هي استخدام escaping functions، أو اضافة الحرف '\' قبل الأحرف الخاصة في نفس المتغير قبل ادخاله في الجملة.
مثال يمكن مراجعته عن تلك الدوال في php:
mysqli.real-escape-string.php
بيئة .NET:
system.data.sqlclient.sqlcommand.parameters.aspx
تعليقات
إرسال تعليق