أمان الويب / دليل حلول تحريري
تشخيص رفض نموذج مشروع بسبب تحقق CSRF
تتبّع الجلسة والطلب والرمز والأصل وحد المحلل دون تعطيل الحماية أو جمع اعتماد فعلي.
قاعدة معرفة للقراءة فقط · بلا تعليقات عامة
تعرّف على الأعراض
قد يرفض التطبيق نموذجاً مشروعاً لمستخدم مصادق، أو يفشل لسان قديم بعد تغير تسجيل الدخول، أو يتلقى طلب API خطأ أصالة رغم وجود ملف ارتباط مرئي. تستخدم بعض الأطر 403 لأسباب متعددة؛ لذلك لا تميز الحالة وحدها بين CSRF والتفويض وانتهاء الجلسة. احفظ فئة الخطأ الموثقة بدقة وإعداد المرشح، دون كشف قيم الرموز.
افهم الأسباب المحتملة
- تشمل الأسباب رمزاً غائباً أو قديماً، أو موضع إرسال خاطئاً، أو ربطاً غير مطابق للجلسة، أو نوع محتوى غير متوقع، أو ترتيب المحلل، أو إعادة بناء الأصل عبر وكيل، أو قواعد إرسال ملفات الارتباط. لا تثبت قيمة تبدو صحيحة بالعميل أن الخادم تحقق من سياق الجلسة نفسه. ولا يبرر فشل مسار مشروع تجاوز الحماية عالمياً.
حدد الحد الذي رفض الطلب فعلياً
استخدم التشخيص الموجود المعتمد لفصل صلاحية الجلسة وإذن المورد وأصالة الطلب والتحقق من الأعمال. سجل المسار والطريقة والإطار وإصداره ونموذج الاعتماد ونوع المحتوى والإعداد غير السري الملائم. لا تنسخ ملف ارتباط أو رابط استرداد أو رمزاً في تذكرة. قارن نجاحاً اصطناعياً مضبوطاً بالحالة المرفوضة واحفظ الاختلاف. لا يرسل الدليل طلباً لتطبيق مهيأ؛ يجرى تشخيص التكامل الحقيقي في بيئة معزولة مفوضة ببيانات مملوكة.
تتبّع تكامل الإطار المتوقع
افحص أين يتوقع الوسيط المدعوم الرمز، والجلسة التي يربطه بها، وما إذا كان التحليل يسبق التحقق. راجع الدخول والخروج وتغير العامل والألسنة المتعددة والانتهاء وفق الدورة المختارة. تحقق من الوكيل الموثوق وافتراض أصل الوجهة بدلاً من قبول رؤوس تحويل اعتباطية. ينظم النموذج المحلي حقائق معلنة مسبقاً فقط؛ فلا يتحقق من رمز أو ملف أو متصفح أو وكيل حقيقي. أبقِ الدليل الغائب مجهولاً بدلاً من ملئه بافتراض مطمئن.
def refusal_review(facts):
if facts.get("sessionValid") is not True:
return "review-session"
if facts.get("permissionValid") is not True:
return "review-permission"
if facts.get("authenticityValid") is not True:
return "review-request-authenticity"
return "review-business-contract"
case = {"sessionValid": True, "permissionValid": True, "authenticityValid": False}
assert refusal_review(case) == "review-request-authenticity"
هذه القيم حقائق خيالية يفترض أنها خضعت للمراجعة، وليست ادعاءات عميل ينبغي الوثوق بها. لا تنفذ الدالة حماية CSRF ولا تغير نظاماً. يثبت التحقق توجيه التشخيص المعلن فقط، لا صحة وسيط أو جلسة فعلية.
أصلح الاختلاف الضيق واحفظ الرفض
طبق تصحيحاً مراجعاً لموضع الرمز أو التحليل أو الدورة أو معالجة الأصل الموثوق ضمن الاختبار المفوض. لا تعطل التحقق لكل المسارات أو تسمح لكل أصل أو تنقل الرمز الخاص إلى URL لإنجاح النموذج. افحص API والمسارات الخلفية وفق اعتمادها، لا بإعفاء أعمى. افصل الخطأ العام المفيد عن التشخيص المحمي. لا يزال النموذج المصحح يحتاج إذن الخادم وقواعد الأعمال، ويبقى منع XSS ضبطاً مكملاً لا بديلاً لهذه الحدود.
تحقق من نجاح الإصلاح
تحقق من نجاح الإرسال المشروع، ورفض الحالات الاصطناعية ذات الرمز الغائب أو الخاطئ أو القديم أو المربوط خطأ، دون تغيير سجل أو مهمة أو إشعار. شمل تغير الجلسة والانتهاء وأنواع المحتوى المدعومة وتعدد الألسنة حيث يلزم. سجل الدليل الفعلي للإطار والمتصفح والوكيل والإعداد. لا يثبت نجاح دالة التوجيه المحلية صحة الوسيط أو سلوك إرسال الاعتماد في المتصفح. تأكد من عدم دخول قيمة رمز في السجل أثناء التشخيص.
امنع تكرار المشكلة
- استخدم حماية إطار مصانة، ووثق عقد الاعتماد وأصالة الطلب، واحتفظ بحالات ارتداد إيجابية وسلبية. راجع تغير الوكيل والمضيف ودورة الحساب مع النماذج. احفظ تشخيصاً أدنى ومالكاً واضحاً للاستثناء. عامل الملف المرئي وHttpOnly وSameSite وCORS كإشارات لأغراض مختلفة، لا أدلة متبادلة تثبت جميعها أصالة الطلب نفسه.