Laravel / أساسي: أسس الطلب والبيانات / الدرس 5
التحقق والوسيط وحدود CSRF
ارفض المدخل المشوه وCSRF دون خلطهما بالتصريح. تتبع البيانات والوسيط ومقارنة رمز الجلسة بمكونات معزولة.
في هذه الصفحة
أهداف الدرس
- تعريف شكل الحقل وقواعد المجال.
- شرح ترتيب الوسيط واختلاف الاستجابة.
- تمييز مقارنة CSRF من تكامل الجلسة والمتصفح.
يثبت التحقق عقد مدخل محدوداً
تصف القواعد الإلزام والأنواع والأطوال والمجال والعلاقات ولا تثبت الإذن أو سلامة التعيين الشامل. استخدم المختار وتحوّل صراحة؛ فقد يقبل integer نصاً دون تحويله. تختلف missing وnullable وprohibited. اقصد السياسة ولا تجمع القواعد للنجاح فقط، وافحص المصفوفة المشوهة والنص.
فحص القواعد دون تطبيق ويب
يستخدم المصنع مترجماً مصفوفياً وبيانات حرفية ويفحص العنوان والمقاعد ويعيد مفاتيح الخطأ لا ترجمة مشروع. لا يشغل Form Request أو مساراً أوCSRF أو تحويلاً. قد يطبع التطبيق الفراغ ويختار التحويل أوJSON بالسياق؛ فافحصه منفصلاً. لا تعمم القاعدة لإذن أو حفظ مدخل وإتاحة خطأ.
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
$translator = new Illuminate\Translation\Translator(new Illuminate\Translation\ArrayLoader(), 'en');
$factory = new Illuminate\Validation\Factory($translator);
$validator = $factory->make(['title' => '', 'seats' => 0], [
'title' => ['required', 'string'], 'seats' => ['required', 'integer', 'min:1'],
]);
echo $validator->passes() ? "valid\n" : "invalid\n";
echo implode(',', $validator->errors()->keys()), PHP_EOL;
invalid
title,seats
يفشل الحقلان بالقواعد المقصودة دون فحص422 أو التحويل والجلسة.
يغير تركيب الوسيط معنى الطلب
قد يطبع الوسيط المدخل ويبدأ الجلسة ويثبت المصادقة ويتحقق ويربط البيانات. يهم الترتيب والمجموعة لاختلافAPI والمتصفح. اتبع ضبط bootstrap الموثق لـ12 لا هيكلاً قديماً. لا تعطل الخط كله لإصلاح اختبار؛ حدد الشرط الغائب. قد تختلف استجابةJSON والتحويل للقواعد نفسها.
تفحص CSRF رمز طلب مرتبطاً بالجلسة
تحتاج أفعال جلسة المتصفحCSRF لإرفاق الكوكي تلقائياً. توثق Laravel الرمز والتكامل. لا يثبت التطابق هوية أو إذناً. يكشف المثال دالة المقارنة بجلسة ومفتاح مصطنعين ولا يرسل طلباً أو يفحص النطاق. قد تتجاوز بيئة الاختبار الفحص؛ فلا يثبت نجاح بلا رمز قبول النشر. افحص الخط وافتراض الاختبار.
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
$app = new Illuminate\Foundation\Application(__DIR__);
$encrypter = new Illuminate\Encryption\Encrypter(str_repeat('d', 32), 'AES-256-CBC');
$middleware = new class($app, $encrypter) extends Illuminate\Foundation\Http\Middleware\VerifyCsrfToken {
public function matches(Illuminate\Http\Request $request): bool { return $this->tokensMatch($request); }
};
$session = new Illuminate\Session\Store('synthetic', new Illuminate\Session\ArraySessionHandler(120));
$session->put('_token', 'synthetic-course-token');
$request = Illuminate\Http\Request::create('/enroll', 'POST', ['_token' => 'synthetic-course-token']);
$request->setLaravelSession($session);
echo $middleware->matches($request) ? "match\n" : "mismatch\n";
$request->request->set('_token', 'different');
echo $middleware->matches($request) ? "match\n" : "mismatch\n";
match
mismatch
يفحص المقارنة فقط دون ملف بيئة أو تهيئة مشروع أو تخزين فعلي أو كوكي.
تشخيص الرفض قبل إضعاف الحماية
افحص الجلسة ونطاق الكوكي وأمانها ومصدر الرمز ومجموعة المسار لـ419، وافحص البنية والتطبيع والتفاوض للتحقق. تختلفJSON المشوهة والجلسة الغائبة والقاعدة. احفظ التفاصيل آمنة والمدخل للتصحيح وافحص المسموح والمرفوض بلا أثر ممنوع. قد يخفي تعطيلCSRF أو الثقة بالمخفي أو توسيع الحقول العرض ويخلق ثغرة.
الأخطاء الشائعة وإصلاحها
اعتبار المدخل الصالح إذناً
- لماذا يحدث؟
- استبدال سياسة الفاعل والمورد بالقواعد.
- كيف تصلحه؟
- التصريح للعملية مستقلاً.
- كيف تتجنب تكراره؟
- اختبار مالك آخر ببيانات صالحة.
تعطيلCSRF لإزالة419
- لماذا يحدث؟
- عدم تشخيص شرط الجلسة والرمز.
- كيف تصلحه؟
- إصلاح النقل والخط المقصود.
- كيف تتجنب تكراره؟
- فحص المطابق والمرفوض المصطنعين.
افتراض تحويل الحقل بقاعدةinteger
- لماذا يحدث؟
- الخلط بين التحقق والتحويل.
- كيف تصلحه؟
- تحويل الصالح عمداً قبل المجال الصارم.
- كيف تتجنب تكراره؟
- فحص النوع والمجال عند الحد.
اختبر فهمك
1. ينجح مصنع التحقق للعنوان والمقاعد. ما غير المثبت؟
اعرض الحل المشروح
تبقى الوسائط والرمز والإذن والرد والمدخل القديم والحفظ أسئلة منفصلة. أضف تكاملاً لا ادعاء تسليم آمن كامل.
2. لماذا قد يقبل اختبارPOST دون إثباتCSRF المنشورة؟
اعرض الحل المشروح
قد تتجاوزها البيئة أو الإعداد عمداً. افحص الخط وأضف دليلاً للرمز ولا تضعف الإنتاج لمحاكاة اختبار مبسط.
أهم ما تعلمته
- التحقق والسياق وCSRF والإذن عقود منفصلة.
- شخّص الشرط الغائب قبل تغيير سياسة الأمن.