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

Token Expiration and Rotation Rules قواعد صلاحية التوكن وتدويره الدوري

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

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

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

تساعد إضافة طابع زمني لانتهاء الصلاحية (TTL) وتدوير التوكن بعد العمليات الحساسة على تقليص نافذة الخطر إلى الحد الأدنى.

  • احفظ وقت الإنشاء $_SESSION["csrf_time"] = time() مع التوكن، وارفض التوكنات التي يتجاوز عمرها مدة الصلاحية المحددة (مثل 3600 ثانية).
  • أعد توليد $_SESSION["csrf_token"] فور تسجيل دخول المستخدم أو خروجه أو تغيير كلمة مروره.
  • فضّل التوكن المرتبط بالجلسة مع وقت صلاحية على التوكن أحادي الاستخدام الصارم لتفادي تعطل النماذج عند فتح المستخدم لعدة تبويبات.

عندما يتجاوز الفارق الزمني $now - $_SESSION["csrf_time"] حد 3600 ثانية، يُرفض التوكن القديم ويُستبدل بتوكن عشوائي جديد.

PHP
<?php
$now = 1762550000;
$_SESSION['csrf_token'] = "9a8b7c6d5e4f";
$_SESSION['csrf_time']  = $now - 7200; // Created 2 hours ago
$ttl = 3600;

$isExpired = ($now - $_SESSION['csrf_time']) > $ttl;
if ($isExpired) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(16));
    $_SESSION['csrf_time']  = $now;
    echo "Token expired (> 3600s) -> Rotated!\n";
}