跨站請求偽造(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 攻擊。在選擇方法時,請根據您的應用程序和框架需求進行權衡。