تخطي مشاكل حقن قواعد البيانات الجزء الثاني .
شاهدنا سوياً في الجزء الاول من الموضوع تخطي مشاكل حقن قواعد البيانات – القسم الأول ماهي sql injection وكيف نستطيع تحويل مسار أو هدف الاستعلام الاصلي في البرنامج الى استعلام يخدمنا بدون تردد .
سيتم التطبيق في هذا الجزء على صندوق تعليقات في موقع اخباري كالذي نراه في الكثير من المواقع .
اللغه والتقنية المستخدمه في التطبيق هي asp.net – vb.net . وقاعدة بيانات sql server (“يمكنك التطبيق على اي مزود قواعد بيانات أردت”)
قد نجد من يقول ان تطبيقات الويب المبنيه بتقنية asp.net تحمي نفسها , هذا غير صحيح فأي تطبيق يتعامع مع قواعد البيانات سواء كان تطبيق ويب او ويندوز أو اي شيئ مرتبط بقاعدة بيانات يمكن حقنه ان لم يكن محمي(“أفترض انك مبرمج حقيقي لايستخدم المعالج في asp.net :”) , فمثلاً شركات الهاتف المحمول في السابق كان يمكن حقنها بواسطه رسائل sms
لحمايه قاعدة البيانات لابد وأن تصل القيم المدخله من قبل المستخدم كما هي بحذافيرها الى الحقل المحدد في الجدول , أي لايمكن لعبارات sql التي قد يدخلها المستخدم ان تؤثر على جمله slq الاصلية , وبشكل اوضح حشرها في الحقل المحدد مهما كان محتواها .
لنشاهد المثال .
صندوق للتعليقات في موقع اخباري
لنشاهد شفرة التعامع مع قاعدة البيانات الخاصه بالمثال
لسنا في درس برمجي لكن سنشرح الكود سطراً سطرا
7- في حدث البيج لود أو فتح الصفحه قراءة الخبر
8- تأكدنا من وجود بارامتر يحمل قيمة المفتاح الاساسي في جدول الاخبار.
9-تاكدنا من وجود بارامتر اسمه name اي ان الصفحه تحمل بارامترات تعليق (استخدمنا هذه الطريقه لان فورم الاخبار html وليس asp … )
10- تعريف كائن جديد من نوع sqlcommand لاجل التخاطب مع قاعدة البيانات .
11- استندنا للكائن عبارة الاتصال الموجوده في كلاس منفصل .
12-نوع الكائن أو طريقه عمله , يمكن هنا الاعتماد على برمجة قواعد البيانات ببناء بروسيجر يقوم بالعمليه لكننا هنا استخدمنا عبارة sqlstring اي اننا كتبنا العبارة في داخل برنامجنا وليس في قاعدة البيانات .
13,14,15 – قمنا بالتأكد من الاتصال اذا كان مغلق افتحه .
16,17,18 – تعريف متغير نصي واسندنا له sql
19- اسندنا للكائن عبارة sql التي ستذهب الى قاعدة البيانات , لاحظ اننا لم ندرج القيم مباشرة في عبارة sql بل بدلناها بكلمات مسبوقه بعلامة @ أي بارامترات , وهذه البارامترات هي لب الموضوع أي ان مزود قاعدة البيانات سيأخذ هذه البارامترات ويدرجها في الخلايا المحدده مهما كان محتواها .
20,21,22,23 – اخبرنا مزود قاعدة البيانات بأن بقيم البارامترات الموجوده في عبارة sql
24- نفذنا العبارة على قاعدة البيانات .
25,26,27 تأكد اذا كان الاتصال مفتوح اغلقه.
28 إعادة تحميل الصفحه .
———————————————————
الان لنجرب الكود ونضع هذه الجمله في حقل التعليق .
‘) update tblcomand set fldname=’123456789’- –
هذه الجمله إن لم يوجد حمايه لقاعدة البيانات ستقوم بتحويل جميع البيانات الموجوده في حقل الاسم في الجدول الى 123456789.
من خلال خادم مراقبه قاعدة البيانات
نلاحظ ان جمله sql وصلت كما يلي الى السيرفر
(الصورة التاليه للكود الذي قام السيرفر بأنشائه ليتعامع مع البارامترات)
وأدرجت في الحقل كما هي بحذافيرها
إلى هنا نكون قد انتهينا .
اذا فهمت الموضوع جيداً يمكنك البحث عن PROCEDURE, وكيفية استخدامه
إرسال التعليق