当前位置:首页 > PHP

php csrf实现

2026-01-30 05:10:21PHP

PHP 中 CSRF 防护的实现

CSRF(跨站请求伪造)是一种常见的网络攻击方式,攻击者诱导用户在不知情的情况下提交恶意请求。以下是 PHP 中实现 CSRF 防护的几种方法:

生成 CSRF Token

在用户会话中生成一个唯一的 Token,并将其嵌入表单或请求中:

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']; ?>">
    <!-- 其他表单字段 -->
</form>

验证 Token

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

session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
        die('CSRF token validation failed');
    }
    // 处理表单数据
}

使用 SameSite Cookie 属性

设置 Cookie 的 SameSite 属性为 Strict 或 Lax,限制跨站请求:

session_set_cookie_params([
    'samesite' => 'Strict',
    'secure' => true,
    'httponly' => true
]);
session_start();

双重提交 Cookie 验证

除了表单中的 Token,还可以在 Cookie 中设置相同的 Token 值,服务器端验证两者是否一致:

setcookie('csrf_cookie', $_SESSION['csrf_token'], [
    'samesite' => 'Strict',
    'secure' => true,
    'httponly' => true
]);

// 验证时检查
if ($_POST['csrf_token'] !== $_COOKIE['csrf_cookie']) {
    die('CSRF validation failed');
}

定期更新 Token

为增强安全性,可以定期更新 CSRF Token:

php csrf实现

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

这些方法可以单独使用或组合使用,根据应用的安全需求选择合适的防护级别。实现时应注意 Token 的随机性和保密性,确保每个会话都有唯一的 Token。

标签: phpcsrf
分享给朋友:

相关文章

php实现socket

php实现socket

PHP 实现 Socket 通信 PHP 可以通过 socket 扩展实现网络通信,支持 TCP/UDP 协议。以下是实现 Socket 通信的核心步骤和代码示例。 创建 TCP 服务器 // 创建…

php实现表单

php实现表单

PHP 表单基础实现 创建一个简单的 PHP 表单需要 HTML 表单结构和 PHP 处理脚本。以下是一个完整的示例: HTML 表单部分 (form.html) <form action=…

php 实现秒杀

php 实现秒杀

PHP 实现秒杀的关键技术 秒杀系统需要解决高并发、超卖、性能瓶颈等问题。以下是实现秒杀的核心方案: 使用 Redis 预减库存 将商品库存提前加载到 Redis 中,通过原子操作保证库存准确性:…

php 实现无限分类

php 实现无限分类

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、菜单管理等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 这是最简单的实现方式,每个分类记录存储其父…

php实现伪静态

php实现伪静态

PHP 实现伪静态的方法 伪静态(URL Rewrite)是一种将动态URL转换为看似静态URL的技术,提升SEO友好性和用户体验。以下是几种常见的实现方式: 使用 Apache 的 mod_rew…

php https实现

php https实现

PHP 中实现 HTTPS 的方法 在 PHP 中实现 HTTPS 主要通过配置服务器和编写代码来确保通信的安全性。以下是几种常见的方法: 配置服务器支持 HTTPS 确保服务器已安装 SSL/T…