شرح صفوف ومحتوى الفقرة
تشارك طلبات AJAX المرسلة بطرق POST وPUT وDELETE كوكيز جلسة المستخدم، ولذلك تتطلب التحقق من توكن CSRF تماماً كالنماذج التقليدية.
- في نماذج
FormData، يُرسل الحقل المخفي<input type="hidden" name="csrf_token">تلقائياً ويُقرأ من$_POST["csrf_token"]. - في طلبات JSON، اقرأ التوكن من وسم
<meta name="csrf-token" content="...">وأرسله في رأس الطلبX-CSRF-Token. - يحوّل PHP اسم الرأس
X-CSRF-Tokenتلقائياً ليصبح متاحاً داخل المصفوفة$_SERVER["HTTP_X_CSRF_TOKEN"].
يتيح استخدام سلسلة دمج الفارغ $_POST["csrf_token"] ?? $_SERVER["HTTP_X_CSRF_TOKEN"] ?? "" دعم كل من نماذج FormData وطلبات JSON المرسلة برأس مخصص.
PHP
<?php
$_SESSION['csrf_token'] = '7f4e9a2c1b8d6035';
$_SERVER['HTTP_X_CSRF_TOKEN'] = '7f4e9a2c1b8d6035';
$candidate = (string) ($_POST['csrf_token'] ?? $_SERVER['HTTP_X_CSRF_TOKEN'] ?? '');
$sessToken = $_SESSION['csrf_token'] ?? '';
$valid = ($sessToken !== '') && hash_equals($sessToken, $candidate);
echo json_encode(['ok' => $valid, 'csrf_verified' => $valid]) . "\n";