代码示例

生成 CSRF Token
use app\common\service\CsrfService; $csrf = new CsrfService(); $token = $csrf->generate(); // 首次调用: 生成32字节随机hex字符串,存入Session // 后续调用: 返回已有Token(不重复生成) // Session key: 'csrf_token'
验证 CSRF Token
$csrf = new CsrfService(); $result = $csrf->validate(input('_token')); if ($result) { // 验证通过后自动轮换Token // 旧Token失效,新Token生成 } else { // Token无效或已过期 }
在表单中使用

CsrfService 说明

Token 机制

1. generate() 生成32字节随机hex字符串,存入 Session

2. 同一请求周期内多次调用返回同一 Token(不重复生成)

3. validate() 使用 hash_equals() 时序安全比较

4. 验证通过后自动轮换 Token,旧 Token 立即失效

安全特性

• 使用 random_bytes() 生成真随机数

hash_equals() 防止时序攻击

• Token 一次性使用,验证后自动轮换

• 与 FrontendCsrf 中间件配合使用