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

PHP / أساسي: القيم وأسس الطلب / الدرس 5

مدخل HTTP والنماذج وحدود التحقق

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

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

أهداف الدرس

  • تمييز بنية النقل من قيم المجال.
  • التحقق من الأولي دون مقارنة false مرنة.
  • تصميم رفض وتصحيح آمنين.

الطلب دليل خارجي لا كائن موثوق

يقرأ المحول الطريقة والمسار والترويسات والكوكيز والجسم وفق واجهته. تملأ PHP العامات للصيغ المدعومة لكن القيم خارج الثقة. تنتج النماذج نصوصاً وقد تنتج مصفوفات بالتسمية، وJSON مسار آخر. لا تفترض أن $_POST كل جسم أو أن المخفي موثوق. حوّل التمثيل لسجل صالح صغير قبل المجال واحتفظ بالأصل بقدر التصحيح والتشخيص الآمن.

التحقق من الصياغة والمجال صراحة

تقبل القاعدة نصاً يعترف به مدقق الصحيح بين واحد وعشرين. يرفض المحلل المصفوفة قبل الترشيح ويعيد null للخطأ. تعيد filter_var هنا false للفشل، فتهم الصرامة إذا كان الصفر صالحاً في عقد آخر. لا تطبع المعرف إن تطلب بايتات دقيقة. اتفق على الأصفار والإشارات والتوطين واختبرها لا تستنتجها من الاسم. لا يغني التحويل القسري.

php البنية الأولية قبل فحص الصحيح
<?php
declare(strict_types=1);
function quantity(mixed $raw): ?int {
    if (!is_string($raw)) { return null; }
    $value = filter_var($raw, FILTER_VALIDATE_INT, ["options" => ["min_range" => 1, "max_range" => 20]]);
    return $value === false ? null : $value;
}
echo quantity("3"), PHP_EOL;
echo quantity("3x") === null ? "invalid
" : "valid
";
echo quantity(["3"]) === null ? "invalid shape
" : "valid
";
الناتج المتوقع
3
invalid
invalid shape

يرفض المحلل النص المشوه والمصفوفة دون تحويلهما لكمية مقنعة.

تسبق الطريقة والتحقق الآثار

اختر الطرق والصيغ قبل الحجز. لا تنشئ قراءة صفحة تسجيلاً بسبب معامل عنوان. يحتاج النموذج المغير تصريح خادم واستراتيجية CSRF تلائم الجلسة لا تحقق JavaScript فقط. أعد رفضاً معرفاً واحفظ الصحيح للتصحيح. ينتج النموذج المحلي حالات تشبه HTTP دون خادم أو تعديل؛ والإرسال محول منفصل يجب تمييز دليله.

php نموذج قرار طلب خالص
<?php
declare(strict_types=1);
function decide(string $method, array $input): array {
    if ($method !== "POST") { return ["status" => 405]; }
    if (!isset($input["name"]) || !is_string($input["name"]) || trim($input["name"]) === "") {
        return ["status" => 422, "error" => "name required"];
    }
    return ["status" => 200, "name" => trim($input["name"])];
}
echo json_encode(decide("GET", []), JSON_THROW_ON_ERROR), PHP_EOL;
echo json_encode(decide("POST", ["name" => "  Ada  "]), JSON_THROW_ON_ERROR), PHP_EOL;
الناتج المتوقع
{"status":405}
{"status":200,"name":"Ada"}

تمثل الأعداد النتائج ولا ترسل HTTP، ولا ينشأ تسجيل أو جلسة.

ينبغي أن يتيح التحقق التصحيح

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

تحديد حجم المدخل وسلوك الرفع

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

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

وصول حقل كمصفوفة مفاجئة

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

تغيير GET لحالة التسجيل

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

فقدان كل الحقول الصحيحة عند الرفض

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

اختبر فهمك

1. يسمح بالصفر وتعيد filter_var صفراً. هل يرفضه if (!$value)؟

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

لا؛ قارن بـfalse صارماً ثم طبق المجال. يخلط فحص الصدق الصفر بالفشل. اختبر الصفر والمشوه والغائب مستقلاً.

2. يقول حقل سعر مخفي سنتاً. بماذا يثق الخادم؟

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

استخدم معرف الدورة المتحقق منه للسعر المرجعي وسياق الإذن بالخادم. المخفي بيانات عرض أو قرينة اتساق قابلة للتعديل. ارفض غير المتسق أو المخول قبل الحجز والدفع.

أهم ما تعلمته

  • تحقق من البنية الخارجية قبل تحويل القيم.
  • الطريقة والإذن وCSRF والتصحيح أجزاء منفصلة للعقد.

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