شرح صفوف ومحتوى الفقرة
يجب أن يكون توكن CSRF مستحيل التوقع؛ لذا ولّده دائماً عبر مولد البايتات العشوائية التشفيري في PHP (random_bytes(32)) مع تحويله لنص سداسي عشري بدالة bin2hex().
- تُنتج العبارة
bin2hex(random_bytes(32))سلسلة سداسية عشرية بطول 64 محرفاً وبقوة عشوائية تبلغ 256 بت. - خزّن التوكن المولد داخل
$_SESSION["csrf_token"]ليبقى مرتبطاً حصرياً بجلسة المستخدم الحالية على الخادم. - لا تستخدم أبداً الدوال القابلة للتوقع مثل
rand()أوmt_rand()أوuniqid()أوtime()لتوليد التوكنات الأمنية.
تسحب دالة random_bytes(32) اثنيْن وثلاثين بايتاً عشوائياً تشفيرياً من نواة نظام التشغيل، وتحولها bin2hex() إلى نص آمن من 64 محرفاً.
PHP
<?php
$_SESSION = [];
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
$token = $_SESSION['csrf_token'];
echo "Token Length : " . strlen($token) . " hex chars\n";
echo "Valid Hex? : " . (ctype_xdigit($token) ? "Yes" : "No") . "\n";