当前位置:首页 > PHP

php实现csrf

2026-01-29 11:36:22PHP

PHP 实现 CSRF 防护的方法

CSRF(跨站请求伪造)是一种常见的网络攻击方式,攻击者通过伪造用户的请求来执行非预期的操作。在 PHP 中可以通过以下方法实现 CSRF 防护:

生成 CSRF Token

在用户会话开始时生成一个唯一的 Token,并将其存储在 Session 中:

session_start();
if (empty($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}

在表单中嵌入 Token

将生成的 Token 嵌入到表单中,作为隐藏字段:

<form action="process.php" method="post">
    <input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
    <!-- 其他表单字段 -->
    <input type="submit" value="提交">
</form>

验证 CSRF Token

php实现csrf

在处理表单提交时,验证 Token 是否匹配:

session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
        die('CSRF 验证失败');
    }
    // 验证通过,处理表单数据
}

AJAX 请求中的 CSRF 防护

对于 AJAX 请求,可以将 Token 放在请求头中:

var xhr = new XMLHttpRequest();
xhr.open('POST', 'process.php', true);
xhr.setRequestHeader('X-CSRF-Token', '<?php echo $_SESSION['csrf_token']; ?>');
xhr.send(formData);

然后在 PHP 中验证:

php实现csrf

if ($_SERVER['HTTP_X_CSRF_TOKEN'] !== $_SESSION['csrf_token']) {
    die('CSRF 验证失败');
}

Token 过期机制

可以设置 Token 的有效期,增加安全性:

if (empty($_SESSION['csrf_token_expire']) || time() > $_SESSION['csrf_token_expire']) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
    $_SESSION['csrf_token_expire'] = time() + 3600; // 1小时后过期
}

同源策略检查

检查请求的来源是否与预期一致:

$allowedOrigins = ['https://yourdomain.com'];
if (isset($_SERVER['HTTP_ORIGIN']) && !in_array($_SERVER['HTTP_ORIGIN'], $allowedOrigins)) {
    die('非法请求来源');
}

这些方法可以有效地防护 CSRF 攻击,建议根据实际需求组合使用。

标签: phpcsrf
分享给朋友:

相关文章

php实现分页

php实现分页

PHP实现分页的基本方法 使用原生PHP实现分页功能需要结合数据库查询和HTML展示。以下是核心实现步骤: 数据库查询与分页逻辑 // 连接数据库 $conn = new mysqli('loca…

php实现跳转

php实现跳转

PHP 实现页面跳转的方法 在 PHP 中实现页面跳转有多种方式,以下是常见的几种方法及其适用场景: 使用 header() 函数 通过 header() 函数发送 HTTP 头部信息实现跳转。注意…

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php 实现排序

php 实现排序

PHP 实现数组排序的方法 PHP 提供了多种内置函数和方法来实现数组排序,适用于不同的排序需求。以下是一些常见的排序实现方式: 使用 sort() 函数对数组进行升序排序 sort() 函数对数组…

php下载文件实现

php下载文件实现

PHP 下载文件实现方法 使用 header() 函数强制下载 设置合适的 HTTP 头信息,强制浏览器下载文件而非直接打开。 $file_path = '/path/to/file.pdf'; $…

php实现登录功能

php实现登录功能

创建登录表单 在HTML中创建一个表单,包含用户名和密码输入框。表单的action属性指向处理登录的PHP文件,method设置为POST。 <form action="login.php"…