Spring Boot / دليل حلول تحريري

تمييز رفض HTTP بالتحقق والأمان

حدد هل جاءت 400 أو 401 أو 403 أو 404 من المسار أوالتحويل أوالتحقق أوالمصادقة أوالتفويض أوسياسة الإخفاء.

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

قاعدة معرفة للقراءة فقط · بلا تعليقات عامة

تعرّف على الأعراض

قد لا يصل الطلب للمتحكم رغم نجاح استدعاء مباشر. وقد تكون 403 ل CSRF أوالسلطة، ولا يصل التالف للتحقق قبل نجاح الهوية.

لا تكفي الرسالة العامة لتصنيف الحد. احفظ هوية آمنة وطريقة ومساراً ووسيطاً وحالة وسبباً مقيداً دون نسخ الاعتماد أوالجسم الشخصي إلىالسجلات العامة.

افهم الأسباب المحتملة

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

تتبع الطلب قبل تغيير السياسة

سجل النسخة والسلسلة والضبط والطريقة والمسار والوسيط والهوية والسلطة المقصودتين ومعرف ربط آمن. لا تنشر Authorization أوكوكيز أوكلمة أوجسماً خاصاً. حدد مطابقة المسار وهل استُدعيت الخدمة. ميّز العقد المقصود من الفعل المرصود؛ فلا يثبت رقم حالة وحده السبب أوالطبقة التي اختارته.

صنف الإدخال والهوية مستقلاً

قد تنتج 400 من التحويل أوالتحقق، وتتعلق 401 بالهوية، وقد تكون 403 تفويضاً أو CSRF. وقد تعني 404 غياب مسار أومورد أوإخفاء مقصوداً. افحص المعالج والسبب، ولا تعطل CSRF أوتسمح للجميع أوتعد 200 لكل شيء للوصول إلىنقطة تصحيح. إصلاح المراقبة لا يكون بإزالة حدود الأمان التي تحاول فهمها.

راقب حد تحويل واحداً تحت الأمان المقصود

يستخدم المثال المتحكم والسلسلة السابقين وسلطة القراءة وحدها، ويطلب معرفاً غير عددي. تقع 400 المقصودة عند التحويل قبل الخدمة. يحتاج اعتماد اختبار 3.5 ولم ينفذ هنا. لا تتحقق الهوية المصطنعة من رمز أوكلمة فعليين، ولا يثبت نجاحه سلوك POST و CSRF. يختار الاختبار سؤالاً محدوداً ولا يمنح بقية النظام تغطية لم يرها.

java تأكيد توضيحي للتحويل قبل الخدمة
package training.catalog;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.context.annotation.Import;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.context.bean.override.mockito.MockitoBean;
import org.springframework.test.web.servlet.MockMvc;
import static org.mockito.Mockito.verifyNoInteractions;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@WebMvcTest(ProductController.class)
@Import(ApiSecurity.class)
class BadProductIdFixture {
    @Autowired MockMvc mvc;
    @MockitoBean ProductService products;
    @Test @WithMockUser(authorities="catalog:read")
    void rejectsBeforeLookup() throws Exception {
        mvc.perform(get("/products/not-a-number"))
            .andExpect(status().isBadRequest());
        verifyNoInteractions(products);
    }
}

المسار والسلطة سياقيان؛ والاختبار مقترح لا طلب منفذ أو نتيجة Spring مرصودة.

أصلح العقد المثبت لا العرض

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

تحقق من نجاح الإصلاح

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

امنع تكرار المشكلة

  • تتبع عقد الطلب والخطأ وقواعد الأمان معاً، واحفظ اختبارات المنع وتدفقات المتصفح والجلسة والرمز المدعومة. لا تعد CORS مصادقة أوالدعوة المباشرة دليلاً على HTTP والتفويض والتحقق.

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