跨站请求伪造(CSRF)是一种网络攻击,攻击者通过伪造已经登录的用户发起恶意请求
// 生成 CSRF 令牌 session_start(); $csrf_token = bin2hex(random_bytes(32)); $_SESSION['csrf_token'] = $csrf_token; // 在表单中添加隐藏字段 echo '<form action="submit.php" method="post">'; echo '<input type="hidden" name="csrf_token" value="' . $csrf_token . '">'; // 其他表单字段... echo '</form>'; // 验证 CSRF 令牌 if (isset($_POST['csrf_token']) && $_POST['csrf_token'] === $_SESSION['csrf_token']) { // 处理表单数据 } else { // 无效的 CSRF 令牌,拒绝请求 } @csrf的Blade指令,可以轻松地在表单中添加CSRF令牌。<!-- Laravel Blade 模板 --> <form action="/submit" method="post"> @csrf <!-- 其他表单字段... --> </form> // 设置 cookie session_start(); setcookie('csrf_token', $_SESSION['csrf_token'], 0, '/'); // 验证 cookie if (isset($_COOKIE['csrf_token']) && isset($_POST['csrf_token']) && $_COOKIE['csrf_token'] === $_POST['csrf_token']) { // 处理表单数据 } else { // 无效的 CSRF 令牌,拒绝请求 } // 设置 SameSite 属性 session_start(); setcookie('csrf_token', $_SESSION['csrf_token'], ['samesite' => 'Strict']); Content-Security-Policy: default-src 'self'; script-src 'self' https://trustedscripts.example.com; 结合以上方法,可以有效地防范 CSRF 攻击。在选择方法时,请根据您的应用程序和框架需求进行权衡。