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

FastAPI / المتوسط: تكامل التطبيق والأمن / الدرس 11

صلاحية المورد ونطاق المستأجر

طبق الفاعل الموثوق على المورد والعملية مع منع افتراضي واختبارات للسياسة الحقيقية.

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

أهداف الدرس

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

الهوية بداية القرار

تحدد المصادقة الفاعل وتقرر الصلاحية العملية والمورد والوقت. لا يمنح الدخول كل شيء. وضح المستأجر والملكية والدور والحالة؛ ويسمح المثال للمالك أومدير موثوق مستقلا ويمنع غيرهما بكائنات خادم اصطناعية. لا تثق بدور ومالك من الجسم لصحة نوعهما.

python فحص سياسة ملكية نقي كامل
def may_edit(actor, document):
    return bool(actor and (actor["role"] == "admin" or actor["id"] == document["owner_id"]))
document = {"owner_id": 7}
print(may_edit(None, document))
print(may_edit({"id": 7, "role": "user"}, document))
print(may_edit({"id": 8, "role": "user"}, document))
print(may_edit({"id": 8, "role": "admin"}, document))
الناتج المتوقع
False
True
False
True

النتائج منع وسماح ومنع وسماح بمدخل موثوق اصطناعي لا طلب غير موثق.

تحميل الهدف الفعلي وفحص إذنه

حل المعرف بنطاقه وافحص العملية. يركب المثال البحث والملكية كتبعية ويحفظ السياسة مع تبديل الفاعل بالاختبار. يتبع الغائب 404 والممنوع 403 العقد، وقد تخفي تطبيقات الوجود باتساق. لا تفحص واحدا ثم تجلب آخر غير مفحوص بمسار آخر.

python اختبار صلاحية مورد HTTP كامل
from typing import Annotated
from fastapi import Depends, FastAPI, HTTPException
from fastapi.testclient import TestClient
def current_user(): return {"id": 7}
def authorized_document(document_id: int, user: Annotated[dict, Depends(current_user)]):
    document = {1: {"id": 1, "owner_id": 7, "text": "public lab text"}}.get(document_id)
    if document is None: raise HTTPException(status_code=404, detail="Missing")
    if document["owner_id"] != user["id"]: raise HTTPException(status_code=403, detail="Forbidden")
    return document
app = FastAPI()
@app.get("/documents/{document_id}")
def document(value: Annotated[dict, Depends(authorized_document)]): return {"id": value["id"]}
with TestClient(app) as client:
    print(client.get("/documents/1").status_code)
    app.dependency_overrides[current_user] = lambda: {"id": 8}
    try:
        print(client.get("/documents/1").status_code)
    finally:
        app.dependency_overrides.clear()
الناتج المتوقع
200
403

ينجح المالك ويمنع الآخر مع بقاء البحث والسياسة، والمزود للمختبر لا مصادقة فعلية.

إبقاء الإذن قريبا من تغيير الحالة

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

مراجعة كل طريق تعرض

قد تكشف القراءة والتعديل والحذف والقائمة والتصدير والملف والخلفية؛ فلا يحمي التفصيل قائمة غير مرشحة. لا تستبدل scopes والأدوار الملكية والمستأجر. دقق بمراجع آمنة وراجع مستوى الموجه والمسار خصوصا بعد التنظيم؛ فقد يهزم مسار منسي الباقي.

اختبار مصفوفة الصلاحية

أدرج المجهول والمالك والآخر والمستأجر الخطأ والمميز والحالة. بدل المدخل فقط واحفظ السياسة، وافحص الحالة وغياب البيانات لا false وحدها. الأمثلة معزولة اصطناعية بلا هوية حقيقية أوقاعدة. تكون السياسة مفهومة بمدخل موثوق وتراجع عند تغير الدور والحالة والحفظ لا تزخرف مرة للأبد.

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

يصل كل موثق لكل كائن

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

يختار العميل مالكه الموثوق

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

يتقادم فحص إذن مبكر

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

اختبر فهمك

1. يفحص التفصيل الملكية ولا يفحص التصدير. هل المورد محمي؟

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

لا؛ احصر كل طريق واختبره بآخر. لا يعوض مسار آمن آخر يعيد البيانات دون إذن.

2. لماذا يضعف تبديل الملكية بسماح دائم اختبار الأمن؟

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

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

أهم ما تعلمته

  • تحدد المصادقة الفاعل وتقرر الصلاحية العملية والمورد والوقت.
  • قد تتغير الملكية بين الفحص والكتابة؛ فاربط الشرط بالمعاملة عند الأهمية، ولا تجعل الحقن ذرية.
  • أدرج المجهول والمالك والآخر والمستأجر الخطأ والمميز والحالة.

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