الاثنين، 14 ديسمبر 2015

sql. injections

: SQL INJECTION(، أو حقن تعليمات الاستعلام البنيوية )SQL( بإضافات. الهدف هو استغلال أي ثغرة أمنية موجودة بطبقة قاعدة البيانات التابعة لأي برنامج )DATABASE LAYER( هذه الثغرات ممكن أن تكون حاضرة عندما لا يتم تصفية مدخلات المستخدم لبعض الحروف والرموز الخاصة )ESCAPE CHARACTERS( المضمنة داخل جمل لغة الاستعلام البنيوية ، أو ان لا يتم مراجعة نوعية المدخلات ان كانت نصيةام عددية )STRONGLY TYPED( مما يسبب عدم التكهن بنتيجة تنفيذها. #أنواع ثغرات اختراق لغة الاستعلام البنيوية : عدم تصفية الرموز الخاصة بشكل صحيحهذا النوع من أختراق لغة الاستعلام البنيوية يحصل عندما لا يتم تصفية مدخلات المستخدم من الرموز الخاصة)ESCAPE CHARACTERS( التي يتم أدراجها داخل جمل بصيغة لغة الاستعلام البنيوية والتي يمكن ان تؤدي للتلاعب بهذه الجمل المدخلة لقاعدة البيانات من قبل مستخدمي البرنامج. الجملة التالية تبين هذه الثغرة: SELECT * FROM users WHEREname=' + userName + '; هذه الجملة سوف تستدعي جميع السجلات الخاصة باسم المستخدم )userName( من جدول )users(, لكن إذا تم تغير المتغير )userName( بشكل معين وباستخدام الرمز الخاص )'( من قبل المستخدم المخترق)MALICIOUS USER(, فمن الممكن لهذه الجملة ان تفعل أكثر مما هو منوي عليه, مثلا يمكن استبدال قيمة المتغير )userName( بالجملة الأتية:a' or 't'='t وبالتالي تصبح الجملة كالاتي : SELECT * FROM users WHERE name='a'or't'='t'; أذا تم أستخدام الجملة السابقة بأجراء التأكد من هوية المستخدم )AUTHENTICATION PROCEDURE(, فمن الممكن أستخدام هذه الطريقة للحصول على الصلاحية لأن نتيجة المعادلة 't'='t' هي دائما صحيحة )TRUE(. معظم خوادم لغة الاستعلام البنيوية )SQL SERVERS( تسمح بتنفيذ عدة جمل في آن واحد وبالتالي يمكن حقن أي جملة صحيحة عن طريق أستخدام هذه الطريقة بإضافة الجملة إلى نهاية المدخل, مثلا يمكن لقيمة)userName( في الجملة الاتية أن تتسبب بمحو جدول المستخدمين )users( من قاعدة البيانات بالأضافة لأظهار جميع بيانات جدول ) data(:a'; DROP TABLE users; SELECT * FROM data WHERE name LIKE '% وبالتالي تصبح الجملة كالاتي: SELECT *FROM users WHERE name='a'; DROP TABLE users; SELECT * FROM data WHERE name LIKE'%'; بعض تطبيقات لغة الاستعلام البنيوية الأخرى لا تسمح بتنفيذ عدة أوامر في جملة واحدة للحماية من المخترقين و منعهم من حقن جمل الاستعلام بشكل منفصل, ولكن هذا لا يمنعهم من تعديل هذه الجمل. معالجة نوع الحقل الخاطئة هذا الشكل من الاختراق يحصل عندما لا يتم التأكد من نوع الحقل المدخل من قبل المستخدم. يمكن لهذا الاختراق ان يحصل مثلا عند استخدام حقل من نوع عددي)NUMERIC( في جملة الاستعلام, ولكن المبرمج لم يقم بمراقبة مدخلات المستخدم لمعرفة أذا كانت من نوع عددي ام لا. مثلا: SELECT * FROM data WHERE id=" + a_variable + "; من الواضح في هذه الجملة ان المقصود من المتغير)a_variable( ان يكون عدد مرتبط بالحقل )id(, ولكن إذاكان في الحقيقة من نوع نص فمن الممكن ان يتم التلاعب به من قبل المستخدمين كما يشائون, وبالتلي يمكنهم ان يمرروا جمل مخربة. مثال: 1 DROP TABLE users; وبالتالي تصبح الجملة كالاتي: SELECT * FROM data WHERE id=1; DROP TABLE users; وعند تنفيذها سوف يتم محو جدول )users( من قاعدة البيانات. ثغرات داخل خادم قاعدة البيانات نفسه من الممكن ان تظهر الثغرات أحيانا داخل برنامج خادم قاعدةالبيانات نفسه )VALNERABILITIES INSIDE THE DATABASE SERVER(, كما الحال في )MySQL Server( مع الوظيفة real_escape_chars)( .]1[حماية البرامج من أختراق لغة الاستعلام البنيوية معالجة البرامج وتحصينها من السهل الحماية من أختراق لغة الاستعلام البنيوية في معظم لغات البرمجة التي تستهدف تطبيقات شبكة الأنترنت. في لغة برمجة )Perl DBI( مثلا فأن الوظيفة )DBI::quote( تستخدم قبل بعض الرموز )ESCAPESSPECIAL CHARACTERS( بدلا من الرمز )'(. فل نفرض ان المتغير )$sql( يؤشر على )DBI OBJECT(: $query=$sql-

ليست هناك تعليقات:

إرسال تعليق

Ads Inside Post