在 PHP 中,防御 CSRF(跨站请求伪造)攻击的主要方法包括以下几种:
// 生成 CSRF Token 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 Token if (isset($_POST['csrf_token']) && $_POST['csrf_token'] === $_SESSION['csrf_token']) { // 处理表单数据 } else { // 阻止请求 echo "Invalid CSRF Token!"; } $allowed_origins = ['https://example.com', 'https://subdomain.example.com']; $referer = isset($_SERVER['HTTP_REFERER']) ? parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST) : ''; if (in_array($referer, $allowed_origins)) { // 处理请求 } else { // 阻止请求 echo "Invalid referer!"; } setcookie('name', 'value', [ 'expires' => time() + 60 * 60 * 24 * 30, 'path' => '/', 'domain' => 'example.com', 'secure' => true, 'httponly' => true, 'samesite' => 'Strict', // 或 'Lax' ]); 结合以上方法,可以有效地防御 CSRF 攻击。但请注意,没有绝对安全的系统,始终保持警惕和更新防御措施是非常重要的。