انتقل إلى محتوى الدرس

Generating Tokens with random_bytes توليد توكنات تشفيرية آمنة بـ random_bytes

احمِ النماذج والعمليات الحساسة من هجمات تزوير الطلبات عبر المواقع CSRF باستخدام random_bytes والمقارنة الثابتة زمنياً hash_equals.
1 صفوف تعليمية
PHP
0 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

يجب أن يكون توكن 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";