منع دس الاستعلامات SQL Injection:
تعرفنا
في الموضوع السابق على الطريقة التي يستخدمها القراصنة لدس
الاستعلامات من خلال برنامجك.. لمنع ذلك هناك عدة نصائح هامة في هذا الصدد:
1- التقليل من استخدام
مربعات النص، والاستعاضة عنها بأدوات تتيح اختيار القيم، مثل القوائم Lists إن كان هذا ممكنا.
2- استخدام الخاصية MaxLength الخاصة بمربع النص لتحديد طول النص المسموح بكتابته في مربع
النص.. هذا سيحد من قدرة القرصان على كتابة أوامر مدسوسة.
3- إجراء بعض الفحوصات
الصغيرة على قيمة مربع النص، للتأكد من خلو النص الذي كتبه المستخدم من العلامات
المريبة مثل ; ' -- /* */ .. هذا سيشل حركة
القرصان تماما.. والأفضل أن تمنع كتابة هذه الحروف في مربع النص من المنبع
باستخدام الحدث KeyPress.
4- عليك أيضا أن تمنع الكلمات الدالة على أوامر SQL في مربع النص، خاصة DROP و DELETE
و UPDATE و INSERT.
5- لا تقبل أيا من الكلمات التالية في مربع نص يدخل فيه المستخدم اسم ملف:
AUX, CLOCK$, CON, CONFIG$, NUL, PRN
COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8
LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8
6- من المهم أيضا أن تحدد صلاحيات مستخدمي قاعدة البيانات، وألا
تعطي الصلاحيات الخطيرة (كحذف الجداول أو إنشائها) إلا للمديرين، وعليك أن تصنع
نسخة خاصة من البرنامج لهؤلاء المديرين بحيث لا يتم تداولها إلا بينهم.. أما
المستخدمون العاديون، فعليك أن تصنع لهم نسخة أخرى من البرنامج، وأن تتصل هذه
النسخة بالخادم من خلال حساب مستخدم محدود الصلاحيات، وبهذا لو نجح أي قرصان في
تجاوز خطوط دفاعك عبر هذه النسخة، لا يجد الكثير مما يستطيع فعله!
7- كن حذرا من الكلمات التي تبدأ بـ xp_، لأنها البادئة التي يتم بها تسمية الإجراءات المخزنة الإضافية
لمخطط قاعدة البيانات Catalog-extended stored procedures، مثل الإجراء xp_cmdshell.
8- استخدام الإجراءات المخزنة Stored
Procedures في تنفيذ الاستعلامات،
لأنها محفوظة في قاعدة البيانات على الخادم، ومن ثم يقوم سيكويل سيرفر بفحص قيم
المعاملات المرسلة إلى الإجراء المخزن، والتأكد من أنها من النوع الصحيح وبالطول
المحدد.
9- ارفض كتابة الكلمات التالية في مربع النص، لأنها تسمح بحقن
الأكواد المدسوسة في الإجراءات المخزنة:
EXECUTE, EXEC, sp_executesql
10- استخدام المعاملات Parameters لتمرير القيم إلى جمل الاستعلام، بدلا من استخدام طريقة تشبيك
النصوص Concatenation، لأن المعاملات تضمن التحقق من نوع المعامل والطول المسموح به
لقيمته.. لكن نصيحة: لا تتخل عن فحص النصوص التي يكتبها المستخدم في مربعات
النصوص، حتى لو استخدمت المعاملات، فقد تسمح بعض المعاملات النصية الطويلة بعبور
بعض الكود المدسوس.
وفي
المشروع AuthorBooks_Reader استخدمنا الإجراء SqlInjection للتأكد من أن النص الذي كتبه المستخدم في مربع النص لا يحتوي على
أية رموز أو كلمات مريبة، كما استخدمنا معاملا لتمرير النص إلى الاستعلام لمزيد من
الحماية.
كما
استخدمنا الدالة SqlInjection
في المشروع DbTasks
للتأكد من أن قيم المعاملات لا تحتوي على استعلامات مدسوسة.
وسنتعرف
فيما يلي على المعاملات وكيفية استخدامها.
من
كتاب: من الصفر إلى الاحتراف برمجة قواعد البيانات في فيجوال بيزيك دوت نت ADO .NET.. للتنزيل:
ليست هناك تعليقات:
إرسال تعليق
ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.