使用Token机制可有效防止CSRF攻击:先在表单中嵌入通过random_bytes生成并存于session的随机Token,提交时用hash_equals比对POST数据与session中的Token是否一致,校验通过后处理业务逻辑并可选清除Token,确保请求来自可信源。

防止 CSRF(跨站请求伪造)攻击,核心思路是验证请求是否来自可信的源。PHP 中最常用、有效的方法是使用 Token 机制:在表单中嵌入一个一次性令牌(Token),提交时在服务器端校验该 Token 是否合法。
生成并嵌入 Token 到表单
每次展示表单前,生成一个唯一的随机 Token,并将其保存在 Session 中,同时以隐藏字段的形式插入到 HTML 表单里。
- 启动 Session,确保用户上下文可用
- 使用加密安全的函数生成随机字符串作为 Token
- 将 Token 存入 $_SESSION,并在表单中添加 hidden 字段输出
示例代码:
接收并校验 Token
当表单提交后,服务器必须检查 POST 数据中的 Token 是否与 Session 中保存的一致。如果不一致或缺失,拒绝请求。
立即学习“PHP免费学习笔记(深入)”;
- 检查 $_POST 是否包含 csrf_token 字段
- 比对提交的 Token 与 $_SESSION 中存储的值
- 校验通过后可选择刷新 Token(增强安全性)
submit.php 校验示例:
关键安全建议
为了确保 Token 机制真正有效,注意以下几点:
- 使用 random_bytes() 或 openssl_random_pseudo_bytes() 生成强随机 Token
- 使用 hash_equals() 进行比较,避免时序攻击
- 每个敏感操作(如修改密码、转账)都应校验 Token
- Token 应绑定用户会话,不可被预测或复用
- 考虑为不同表单设置不同 Token(如添加 action 标识)
基本上就这些。只要每次提交都经过 Token 校验,就能有效阻断大多数 CSRF 攻击。不复杂但容易忽略细节。











