Abdullah Alammar
Abdullah Alammar

@Aalammar11

11 تغريدة 207 قراءة Feb 04, 2021
ثغرة SQL injection تعتبر من أقدم الثغرات وأكثرها خطورة، بل وما زالت تتصدر قائمة الثغرات التي يتم اكتشافها بناء على OWASP Top 10.
السبب الرئيسي لوجود هذه الثغرة هو كتابة كود غير آمن من قبل المطورين.
هل موقعك من هذه الثغرة ؟
اتبع هذه الخطوات -راح يكون موقعك آمن منها -بإذن الله-
١- دائماً تحقق من المدخلات الخارجية, واسمح فقط بالمحتوى اللي تتوقعه انه يوصلك سواء في نوعه أو حجمه أو حتى محتواه.
مثال: اذا كان فيه خانة تطلب رقم الهوية، في هذه الحالة لا تسمح إلا بالأرقام وتكون ١٠ خانات ويتم رفض أي نوع آخر من المدخلات، وهكذا.
٢- قم ببناء أكثر من طبقة تحقق. مثل التحقق من البيانات القادمة من قواعد البيانات، وتكلمت عنها بالتفصيل في الثريد الخاص بها. وفي حالتنا هذه راح تفيد في الحماية من ثغرة Second Order SQL Injection
٤- اتبع نمط prepared statement وأحياناً تسمى parameterized SQL query . وهذي الآلية باختصار تفصل بناء SQL query عن ال client input. بحيث دائماً يتعرف على ال client input على أنه نص وليس جزء من بناء ال query
مثال استخدامها في بعض اللغات:
Javae EE: PreparedStatemnt()
.Net: SqlCommand() or OleDbCommand() with bind variable
PHP: PDO with bindParam()
٥- استخدم stored procedures:وهذه عبارة عن كود SQL يتم حفظه في قواعد البيانات، ويستخدم لتسهيل العمل، فيتم استدعاؤها بدل ما كتابتها من جديد. مع التنبيه لنقطة،أنه في حال كانت dynamic query أي أنها تحتوي على parameter من المستخدم ففي هذه الحالة يجب بنائها بشكل آمن في قواعد البيانات
ففي هذا المثال ال query هنا غير آمنة من ثغرة sql injection لسببين :
عمل concatenation لل query مع ال user input
استخدام EXEC او EXECUTE
والطريقة الصحيحة هي كالتالي :
استخدام sp_executesql ، فمن خلالها يتم إضافة الquery لوحدها ، ثم إضافة user input as paramerized بعد ما يتم تعريفه ك nvchar
٦- استخدم ORM (Object Relational Mapper). وهذه عبارة عن خاصية توفرها أغلب الأطر الخاصة ببناء تطبيقات الويب تختصر عليك بناء SQL query من الصفر ، وتسهل حياتك كمطور ، وتقلل من خطر sql injection. مع التذكير بخصوص التأكد أنه ما يوجد ثغرة معروفة للنسخة اللي تستخدمها
٧- دائماً تجنب عمل concatenation عند بناء ال SQL query. فهي من أبرز الممارسات السيئة التي ممكن تؤدي لثغرة SQL injection.
هل موقعك آمن *

جاري تحميل الاقتراحات...