当前位置:首页 > 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中实现搜索功能通常涉及数据库查询。以下是一个简单的实现方式,假设使用MySQL数据库: <?php // 连接数据库 $conn = new mysqli('loc…

php验证码实现

php验证码实现

验证码实现方法 在PHP中实现验证码功能通常涉及生成随机字符串或数字,将其转换为图像,并通过会话(Session)进行验证。以下是几种常见的实现方式: 使用GD库生成图像验证码 GD库是PHP内置的…

php实现搜索

php实现搜索

PHP实现搜索功能的方法 在PHP中实现搜索功能通常涉及数据库查询和用户输入的匹配。以下是几种常见的实现方式: 使用MySQL LIKE语句 通过简单的LIKE语句实现基础搜索: $searchT…

php实现即时通讯

php实现即时通讯

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

php 函数实现

php 函数实现

PHP 函数实现基础 PHP 函数的定义使用 function 关键字,后跟函数名和参数列表。函数名不区分大小写,但建议保持一致。 function functionName($param1, $…

php mvc实现

php mvc实现

PHP MVC 实现步骤 模型(Model)层 模型负责数据处理和业务逻辑,通常与数据库交互。创建一个基类模型,其他具体模型继承它。 class Model { protected $db…