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

防止 CSRF(跨站请求伪造)攻击,核心思路是验证请求是否来自可信的源。PHP 中最常用、有效的方法是使用 Token 机制:在表单中嵌入一个一次性令牌(Token),提交时在服务器端校验该 Token 是否合法。
每次展示表单前,生成一个唯一的随机 Token,并将其保存在 Session 中,同时以隐藏字段的形式插入到 HTML 表单里。
示例代码:
<strong><?php
session_start();
// 生成 Token
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
?>
<form method="POST" action="submit.php">
<input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>" />
<input type="text" name="username" />
<button type="submit">提交</button>
</form></strong>当表单提交后,服务器必须检查 POST 数据中的 Token 是否与 Session 中保存的一致。如果不一致或缺失,拒绝请求。
立即学习“PHP免费学习笔记(深入)”;
submit.php 校验示例:
<strong><?php
session_start();
// 验证请求方法
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
die('非法请求');
}
// 检查 Token 是否存在
if (!isset($_POST['csrf_token']) || !hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) {
die('CSRF 校验失败,请求不合法');
}
// 清除 Token(可选,防止重放)
unset($_SESSION['csrf_token']);
// 处理业务逻辑
echo "数据提交成功";
?></strong>为了确保 Token 机制真正有效,注意以下几点:
基本上就这些。只要每次提交都经过 Token 校验,就能有效阻断大多数 CSRF 攻击。不复杂但容易忽略细节。
以上就是php如何防止csrf跨站请求伪造_php生成token嵌入表单与校验方法的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号