محتويات الدورة

Django / الصحة ودليل الإنتاج / الدرس 15

إعدادات الأمن وحدود الثقة

افصل ضمانات المضيف والأصل والنقل والمدخل والإذن مع إعداد نشر مراجع.

وقت القراءة التقريبي: 3 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • يتبع الأمن القدرات وتدفق البيانات
  • فحص وجهة الإعادة بالمساعد المناسب
  • اختبار السالب بالحدود الحقيقية

يتبع الأمن القدرات وتدفق البيانات

اسرد تحكم المستدعي ووجهة القيمة للنص والعنوان وSQL والملف والجلسة والعملية، ولكل سياق قواعده. لا يفوض هروب القالب ولا يتحقق من إعادة التوجيه. تحمي معاملات ORM القيم لا SQL الخام والاختيارات البنيوية. تجنب تعقيما عاما وأبعد الأسرار عن المصدر والعميل وسجل الضروري دون حساس. ولا تنتقل سلامة قيمة في سياق إلى سياق آخر تلقائيا؛ فالنص المهرب داخل HTML لا يصبح بذلك عنوان إعادة أو مسار ملف مأذونا.

اختلاف سؤال المضيف وأصل CSRF

تقيد ALLOWED_HOSTS المضيف لا كل أصل موثوق أو صلاحية. تتعلق CSRF_TRUSTED_ORIGINS بفحص الأصل وبالمخطط وفق القواعد، وقد تزيل البدائل العامة الحد. تعتمد HTTPS على الوكيل؛ ثق بترويسة فقط إذا يزيل أو يضبط العميل وفق المطلوب. قد يقوض الخطأ الإعادة والأصل. اختبر المسار لا وصفة عمياء. كما أن ترويسة يدعي بها العميل أن الطلب HTTPS لا تصبح دليلا موثوقا إلا إذا فرض الوكيل المعتمد طريقة وصولها ومنع تزويرها.

فحص وجهة الإعادة بالمساعد المناسب

يفحص المثال وجهات مصطنعة ويقبل HTTPS المعتمد والنسبي ويرفض غير المضيف. يساعد سياسة الإعادة ولا يمنع SSRF بخادم يجلب عناوين ويواجه DNS والتحويل والداخلي. لا تستخدم بادئة نصية تخلط المضيف بامتداد خبيث. وثق next واختبر التالف وذي الشرطتين إذا قبل التطبيق النوع. ويحتاج جلب الخادم لعناوين خارجية سياسة مختلفة تشمل التحويلات وحل الأسماء والوصول الداخلي، فلا يجوز تعميم مساعد وجهة المتصفح على تلك القدرة.

python مثال تنفيذي معزول
from django.conf import settings
settings.configure(
    SECRET_KEY="synthetic-course-key",
    USE_I18N=False, USE_TZ=True,
    INSTALLED_APPS=[],
    DATABASES={"default": {"ENGINE": "django.db.backends.sqlite3", "NAME": ":memory:"}},
    DEFAULT_AUTO_FIELD="django.db.models.AutoField",
    ALLOWED_HOSTS=["testserver"],
)
import django
django.setup()

from django.utils.http import url_has_allowed_host_and_scheme
allowed = {"learn.example.test"}
for destination in ["https://learn.example.test/courses/", "https://other.example.test/", "/courses/"]:
    print(url_has_allowed_host_and_scheme(destination, allowed_hosts=allowed, require_https=True))
الناتج المتوقع
True
False
True

يفحص الحساب المحلي سياسة إعادة فقط دون DNS أو طلب أو تنقل.

إعداد إنتاج صريح دون أسرار

يظهر المقطع DEBUG مغلقا ومضيفا ضيقا وسرا خارجيا ونيات الارتباط والإعادة، وهو إعداد غير تنفيذي لا نشر كامل أو أمر لتطبيق معد. المضيف مصطنع. راجع TLS والوكيل والجلسة والملفات والأخطاء والاستعادة معا. تحتاج HSTS الدائمة نشرًا وتراجعا مقصودين، ولا يكفي DEBUG عند خطأ البقية. ولا يجعل تعطيل DEBUG وحده الخدمة آمنة إذا كانت الثقة بالوكيل أو المضيف أو الجلسة أو تقديم الملفات غير متسقة مع مسار النشر الحقيقي.

python مقطع يتطلب سياق التطبيق
import os

DEBUG = False
SECRET_KEY = os.environ["DJANGO_SECRET_KEY"]
ALLOWED_HOSTS = ["learn.example.test"]
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
الناتج المتوقع
Configuration intent: no debug output, explicit host, external secret, and HTTPS-only cookie/redirect policy.

مقطع يتطلب نشرا ومصدر سر مراجعين ويحذف ثقة ترويسة غير مثبتة ولا ينفذ.

اختبار السالب بالحدود الحقيقية

اختبر المضيفين والإعادة وCSRF والنطاق والهروب وغياب الحساس. عامل المرفوع وسيطا غير موثوق لا أصلًا تنفيذيا. راجع الترقيعات؛ فقد يذكر الدرس القديم محذوفا أو الجديد غير مدعوم. لا تكتسب 5.2 ميزة أحدث لتوثيق بلا إصدار. استخدم المراجع ولا تعطل عاما لنجاح طلب مجهول. ويجب أن يبقى المرفوع من المستخدم محتوى غير موثوق حتى إن خُزن داخل البنية نفسها، وألا تمنحه طريقة التقديم القدرة على تنفيذ شيفرة التطبيق.

الأخطاء الشائعة وإصلاحها

تعد المضيفات قائمة إذن مستخدم

لماذا يحدث؟
اختلط المضيف والتفويض.
كيف تصلحه؟
افصل الحدود.
كيف تتجنب تكراره؟
اختبرها مستقلة.

تدور الإعادة خلف وكيل

لماذا يحدث؟
لا يطابق تفسير HTTPS الترتيب.
كيف تصلحه؟
راجع TLS والترويسات المضبوطة.
كيف تتجنب تكراره؟
اختبر المسار المعزول.

يستخدم فحص الإعادة لمنع SSRF

لماذا يحدث؟
اختلط التنقل والجلب.
كيف تصلحه؟
صمم جلب الخادم مستقلا.
كيف تتجنب تكراره؟
وثق ضمان المساعد.

اختبر فهمك

1. لماذا لا تفعل ترويسة الوكيل لمجرد درس منسوخ؟

اعرض الحل المشروح

تعتمد السلامة ضبط الوكيل للعميل ومسار TLS. تحقق منهما والإعداد معا، وإلا قد تؤثر ترويسات العميل بقرار يعده التطبيق دليلا موثوقا.

2. ماذا تفعل ميزة نص غني بدل safe لكل مخزن؟

اعرض الحل المشروح

حدد الترميز ومعقمه المراجع وأبق الهروب للعادي واختبر السياقات؛ فلا يجعل التخزين المستخدم موثوقا، وافصل الإذن وتقليل البيانات.

أهم ما تعلمته

  • ضمانات الأمن مرتبطة بالسياق.
  • ثق بدليل الوكيل بعد التحقق.
  • تهم إعدادات الإصدار واختبارات السالب.

المراجع الرسمية