الأمن السيبراني / المتوسط: التفكير الدفاعي التشغيلي / الدرس 8
حدود الدفاع في تطبيقات الويب
أبقِ الإدخال غير الموثوق بيانات وافرض الإذن بالخادم وتحقق من افتراضات الميزة.
في هذه الصفحة
أهداف الدرس
- ميّز التحقق وترميز المخرجات والاستعلام المعلمي.
- استخدم السلوك الآمن للإطار بتحقق مناسب للسياق.
تتبّع الإدخال لحد تفسيره
تستقبل التطبيقات قيماً من نماذج وروابط وAPI وملفات وخدمات. قد يصح عنوان أعمال ويحتاج تعاملاً آمناً في HTML أو SQL. يعتمد الأمان على سياق التفسير؛ افصل البيانات والصياغة بواجهات الإطار والمعلمات والمخرجات المناسبة. لا تعتمد منظفاً عاماً لكل شيء. الأمثلة نص عادي بلا حمولة استغلال أو طلب أو هدف.
رمّز لسياق المخرج
يمثل الترميز البيانات في وجهة معينة وتختلف HTML والسمات وJavaScript وCSS والروابط. يهرب المثال علامة بنص عادي للعرض ولا ينقي HTML غنياً أو يؤمن كل سياق. فضل الهروب الآلي وراجع الخام. يحتاج الغني تنقية مصانة بسياسة لا تعطيل الهروب لحفظ التنسيق.
from html import escape
label = "Workshop & notes"
rendered_text = escape(label, quote=True)
assert rendered_text == "Workshop & notes"
يعالج escape المثال المحدد لا كل سياق أو تنقية HTML. لا تعرض صفحة أو تستخدم شبكة ويفحص التحقق التمثيل المتوقع.
اربط البيانات بواجهة القاعدة
تفصل المعلمات البنية والقيم وفق المشغل ولا يعوض الربط النصي ذلك ولو وجد تحقق. يبقى التفويض؛ قد يكشف الاستعلام المعلمي سجلاً بلا شرط ملكية. يستخدم المثال SQLite بالذاكرة وسجلات عادية ويربط السجل والفاعل. تختلف صياغة المعلمات فراجع المنصة ولا تنسخ علامة السؤال لكل مكان.
import sqlite3
with sqlite3.connect(":memory:") as db:
db.execute("CREATE TABLE lessons (id TEXT, owner TEXT, title TEXT)")
db.execute("INSERT INTO lessons VALUES (?, ?, ?)", ("lesson-1", "lab-a", "Intro"))
rows = db.execute(
"SELECT title FROM lessons WHERE id = ? AND owner = ?",
("lesson-1", "lab-a")
).fetchall()
assert rows == [("Intro",)]
ينشئ المثال قاعدة ذاكرة فقط ويشرح الربط وشرطاً ضيقاً لا تفويضاً كاملاً ولا يصل لقاعدة أو حساب أو خدمة.
راجع الجلسة والملف ودفاع المتصفح معاً
تعتمد الميزات الجلسة وأصالة الطلب وحدود الملف والتخزين وضوابط المتصفح. يعزز علم cookie أو CSP التصميم ولا يصلح كل تفويض أو حقن. للرفع دورة ولا يصير تنفيذياً لمألوفية الاسم. استخدم الإطار والتخزين المعتمد وراجع الأصل والمشاركة بالغرض بلا حركة أو رفع أو فحص أو استغلال.
تحقق من الادعاء عند حده الفعلي
تحقق بالمراجعة والوحدة والتكامل المفوض وارعِ الاستخدام الشرعي. Top 10 وعي وASVS والأوراق أكثر تحديداً ولا تشهد بأمان شامل. حدد الإصدار واربط النتائج بالتطبيق. لا يثبت تقرير نظيف غياب العيوب. سجل الافتراض والسياق غير المختبر والمالك لا تجعل سلسلة مهربة ضماناً عاماً.
الأخطاء الشائعة وإصلاحها
يستخدم منظف واحد لكل مخرج
- لماذا يحدث؟
- عوملت السياقات كمتماثلة.
- كيف تصلحه؟
- استخدم الواجهة والترميز المناسبين.
- كيف تتجنب تكراره؟
- تتبّع الإدخال لوجهته.
يسرب استعلام معلمي بيانات آخر
- لماذا يحدث؟
- اختلط الربط بالتفويض.
- كيف تصلحه؟
- افرض النطاق والإذن بالمسار الموثوق.
- كيف تتجنب تكراره؟
- اختبر رفض الحساب الآخر والثبات.
يعطل الهروب لحفظ التنسيق
- لماذا يحدث؟
- تجاوز الغني سياسة تنقية مراجعة.
- كيف تصلحه؟
- استخدم تنقية مصانة بمسموح صريح.
- كيف تتجنب تكراره؟
- راجع استثناء المخرج الخام.
اختبر فهمك
1. هل يجعل عدم فراغ العنوان آمناً بكل سياق؟
اعرض الحل المشروح
لا؛ تختلف صحة الأعمال والتفسير. استخدم واجهة الوجهة ويبقى الترميز والتفويض مطلوبين.
2. ما الدليل التالي لمثال الاستعلام؟
اعرض الحل المشروح
راجع مشغل الواقع والمسارات والنطاق ورفض الغريب والشرعي. لا يثبت المحلي الإعداد أو كل مسار.
أهم ما تعلمته
- تحل القواعد والترميز والربط والتفويض مشكلات مختلفة.
- تعتمد سلامة الإطار على الاستخدام.
- يحدد الدليل سياقه وحدوده.