العربية  
Close Ad

Books Database Programming (11,049 كتاب)

If you do not find what you're looking for, you can use more accurate words.

View more

معالجة قواعد البيانات وتحصينها (DATABASE REMEDATION) (Info)

الأمتيازات الأمنية (SECURITY PRIVILEGES)

ان وضع امتيازات أمنية على قواعد البيانات هو أبسط مثال لحماية قواعد البيانات, وبالتالي القليل من التطبيقات تسمح للمستخدم ان يمحي جدول أو قاعدة بيانات كاملة.

هذه الاستراتيجية لا تحل مشكلة أختراق لغة الاستعلام البنيوية، ولكنها تخفف من شدة الضرر المحتمل.

الإجراءات المخزنة

معظم قواعـد البيانات توفر أمكانية تجهيز جمل الاستعلام في طبقة قواعد البيانات عن طريق الأجراءات المخزنة (STORED PROCEDURES), عوضا عن استخدام طبقة التطبيق (APPLICATION LAYER) لبناء لغة الاستعلام البنيوية بشكل ديناميكي. الأجراءات المخزنة تشمل أجراءات قواعد البيانات متكررة الاستخدام والتي تنادى عن طريق (TYPED PARAMETER). هذه الطريقة توفر عدة فوائد أمنية منها: عن طريق استخدام ال (TYPED PARAMETERS) فأنه يتم تصفية وفلترة مدخلات المستخدم, بالأضافة إلى أن معظم قواعد البيانات تسمح للأجراءات المخزنة بالتنفيذ تحت أمتيازات أمنية معينة, مما يقيد أمكانية قيام التطبيق بعمل اي شيء خارج نطاق الأعمال المحددة مسبقا في الأجراءات المخزنة.

ومع كل هذا فان هذه الطريقة لا تحل مشكلة أختراق لغة الاستعلام البنيوية بشكل كامل, لأنه أذا كانت مدخلات المستخدم (NOT PARAMETERIZED) أو غير مفلترة مثل: أذا أعطينا أجراءين مخزنين (GET_PASSWORD(userName)) و(GET_USER(userName, password)), فأن بأمكان المخترق أن يخترق الشيفرة (CODE) في (GET_USER CALL) أذا كان الرقم السري غير مكتوب بشكل صحيح (CORRECTLY ESCAPED) كالتالي:

(GET_USER('admin', "|| GET_PASSWORD('admin') ||"))

لذا فهي ليست أمنة بشكل كامل !.

الحماية من أختراق الجمل المتعددة (PREVENTING MULTI-STATEMENT ATTACK)

كما ذكرنا مسبقا المخاطر المتعلقة باستخدام الجمل المتعددة, فعلى سبيل المثال لو أخذنا موقع إلكتروني يظهر قائمة من السلع لاسم مستخدم (userName) معين, فأن جملة الاستعلام ستكون:

SELECT * FROM items WHERE userName='$userName';

فمن الممكن ان يقوم المستخدم بأدخال الجملة الأتية:

SELECT * FROM items WHERE userName='' or userName is not null or userName='';

أيضا لو لم نستخدم الرموز الخاصة (QUOTES):

SELECT * FROM items WHERE userid=$userid;

فمن الممكن ان يقوم المستخدم بأدخال الجملة الأتية وهي لا تحوي على الرموز الخاصة (QUOTES):

SELECT * FROM items WHERE userid=33 or userid is not null or userid=44;

الحل الأنسب لهذه المشكلة هي تعريف المتغير (userid) بأن له قيمة عددية فقط, مثل:

if (!ctype_digit($userid)){ die("Invalid characters in userid.");}

وهكذا تحل هذه المشكلة.

عدم تفعيل الجمل النصية

من الممكن حل مشكلة اختراق لغة الاستعلام البنيوية في حال ان محرك قاعدة البيانات يدعم خاصية "عدم تفعيل الجمل النصية" (DISABELING LITERALS) والتي تعني ان تعمل قاعدة البيانات في وضع (MODE) لا يسمح للنصوص والأرقام (TEXT AND NUMBER LITERALS) ان يكونوا في جملة الاستعلام, وبالمقابل فقط حائزي المكان مسموح باستخدامهم. لذا جمل بالشكل الأتي:

SELECT * FROM items WHERE userid=2; SELECT * FROM users WHERE name='Smith';

غير مسموح بتنفيذهم في هذا الوضع وسيظهر لنا خطأ (EXCEPTION), ويجب علينا كتابتهم هكذا:

SELECT * FROM items WHERE userid=?; SELECT * FROM users WHERE name=?;

في حال عدم تفعيل الجمل النصية فأن علينا استخدام رموز حائزي المكان والتي يجب استخدامها لجميع مدخلات المستخدمين. حاليا فقط ال (H2 DATABASE ENGINE) يدعم خاصية "عدم تفعيل الجمل النصية" وهذه التكنولوجيا لم تسجل لها براءة اختراع بعد.

Source: wikipedia.org
Close Ad
Close Ad