代码示例
生成 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 中间件配合使用