PHP-实例-CSRF

1 需求

按照用途分类:

  • 会话(会话ID和会话令牌 二选一)
    • 会话ID:服务器侧自动生成,自动存储在cookie中,需要在服务器侧存储
    • 会话令牌:服务器侧手动生成,手动存储在cookie中,不需要再服务器侧存储
  • CSRF
    • CSRF令牌:

按照存储位置分类:

  • 服务器侧
    • $_SESSION
  • 浏览器侧
    • cookie
    • 隐藏控件

2 语法


3 示例

在 PHP 中,防范 CSRF(跨站请求伪造)攻击的一种常见方法是使用令牌(token)验证。这个令牌通常是一个随机生成的字符串,它在表单提交时与用户的会话(session)相关联。下面是一个简单的 PHP 示例,演示了如何防范 CSRF 攻击:

  1. 生成 CSRF 令牌

在会话开始时,生成一个随机的 CSRF 令牌并将其存储在会话中。

session_start();

// 生成 CSRF 令牌
if (!isset($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
  1. 在表单中包含 CSRF 令牌

在 HTML 表单中,将 CSRF 令牌作为隐藏字段或作为请求头的一部分包含在内。

<form action="submit.php" method="post">
<!-- 其他表单字段 -->

<!-- CSRF 令牌作为隐藏字段 -->
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">

<!-- 提交按钮 -->
<button type="submit">Submit</button>
</form>

或者,你可以使用 JavaScript 将 CSRF 令牌作为请求头的一部分发送:

// 假设你已经在某处将 CSRF 令牌存储在 JavaScript 变量中
var csrfToken = '...'; // 从 cookie、localStorage 或其他地方获取

// 使用 AJAX 发送请求时,将 CSRF 令牌作为请求头的一部分发送
$.ajax({
url: 'submit.php',
type: 'POST',
data: { /* 其他数据 */ },
headers: {
'X-CSRF-Token': csrfToken
},
success: function(response) {
// 处理响应
}
});
  1. 验证 CSRF 令牌

在服务器端,验证接收到的 CSRF 令牌是否与会话中的令牌匹配。

session_start();
// 检查是否提交了 CSRF 令牌
if (isset($_POST['csrf_token']) && $_POST['csrf_token'] === $_SESSION['csrf_token']) {
// CSRF 令牌验证成功,处理表单数据
// ...
} else {
// CSRF 令牌验证失败,可能是 CSRF 攻击
// 可以采取相应的措施,如记录日志、返回错误消息等
die('Invalid CSRF token.');
}

如果你使用的是 AJAX 请求并通过请求头发送 CSRF 令牌,你可以在服务器端通过 $_SERVER['HTTP_X_CSRF_TOKEN'] 来获取它并进行验证。

请注意,这只是一个简单的示例,用于说明如何防范 CSRF 攻击。在实际应用中,你可能还需要考虑其他安全措施,如使用 HTTPS 来加密通信、限制请求的来源等。


4 参考资料

CSRF 令牌(通常称为 CSRF token)通常是在用户会话(session)开始时生成,并在整个会话期间保持不变。这意味着,在用户的单个会话中,CSRF 令牌是唯一的并且相同的,但不同的用户会话或不同的浏览器会话会有不同的 CSRF 令牌。

这是 CSRF 令牌的一个典型实现方式:

  1. 当用户首次访问受保护的页面或应用时,服务器会为该用户会话生成一个随机的 CSRF 令牌,并将其存储在会话数据(如 PHP 的 $_SESSION)中。
  2. 同时,服务器会将这个 CSRF 令牌嵌入到发送到客户端的页面中,通常是通过一个隐藏的表单字段或者 cookie。
  3. 当用户提交表单时,客户端会将 CSRF 令牌包含在请求中(通常是通过表单字段或自定义的 HTTP 请求头)。
  4. 服务器在接收到请求时,会检查请求中的 CSRF 令牌是否与会话数据中的令牌匹配。如果匹配,则继续处理请求;如果不匹配,则拒绝请求,并可能记录一个安全事件。

由于 CSRF 令牌是在会话开始时生成的,并且通常在整个会话期间保持不变,因此服务器可以在多个请求之间验证相同的 CSRF 令牌。这样可以确保只有知道当前会话 CSRF 令牌的用户(即同一浏览器的同一用户会话)才能提交有效的表单请求。

然而,值得注意的是,有些实现可能会选择在每次请求时都生成新的 CSRF 令牌。虽然这可以提供更高的安全性(因为即使 CSRF 令牌在某个时间点被泄露,它也会在很短时间内失效),但它也会增加实现的复杂性,并可能导致一些额外的问题(如需要在多个页面之间传递和同步 CSRF 令牌)。因此,在大多数情况下,每个会话一个 CSRF 令牌是足够安全的,并且更容易实现和管理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/782121.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法简介:什么是算法?——定义、历史与应用详解

引言 在现代计算机科学中&#xff0c;算法是一个核心概念。无论是编程还是数据分析&#xff0c;算法都扮演着至关重要的角色。在这篇博客中&#xff0c;我们将深入探讨算法的定义、历史背景以及它在计算机科学中的地位和实际应用。 什么是算法&#xff1f; 算法是解决特定问题…

DHCP的原理及配置

目录 一、了解DHCP服务 1.什么是DHCP 1.1DHCP广播 2.使用DHCP的好处 2.1为什么使用DHCP 3.DHCP的模式与分配方式 3.1分配方式 3.2模式 二、DHCP工作原理 1.四次回话 2.重新登录 3.更新租约 4.扩展 三、安装DHCP服务 四、DHCP局部配置并且测试 五、使用…

简介空间复杂度

我们承接上一篇博客。我们写了时间复杂度之后&#xff0c;我们就要来介绍一下另一个相关复杂度了。空间复杂度。我觉得大家应该对空间复杂度认识可能比较少一些。我就是这样&#xff0c;我很少看见题目中有明确要求过空间复杂度的。但确实有这个是我们不可忽视的&#xff0c;所…

在门店里造绿色氧吧!康养行业也这么卷了?

拼啥不如拼健康&#xff0c;现在的人算是活明白了&#xff0c;不但中老年人这样想&#xff0c;年轻人也这样干。你可能不知道&#xff0c;现在众多健康养生门店&#xff0c;逐渐成了年轻人“组团养生”的好去处&#xff0c;也是他们吃喝玩乐之外的新兴消费趋势。 而在看得见的…

无需服务器,浏览器跑700+AI模型?!【送源码】

Transformers.js 是一个创新的网络机器学习库&#xff0c;它将先进的 Transformer 模型直接带入浏览器&#xff0c;无需服务器端支持。这个库与 Hugging Face 的 Python transformers 库功能对等&#xff0c;提供相似的 API 接口来运行预训练模型&#xff0c;涵盖了自然语言处理…

Java引用的4种类型:强、软、弱、虚

在Java中&#xff0c;引用的概念不仅限于强引用&#xff0c;还包括软引用、弱引用和虚引用&#xff08;也称为幻影引用&#xff09;。这些引用类型主要用于不同的内存管理策略&#xff0c;尤其是在垃圾收集过程中。以下是对这四种引用类型的详细解释&#xff1a; 1. 强引用&am…

【实践分享】深度学习远程连接GPU

目录 前言 一、创建实例 二、上传文件 三、服务器上传 四、运行代码文件 前言 1、使用平台&#xff1a;恒源云 2、教程总结自B站大佬Larry同学发布的教程视频 一、创建实例 通俗&#xff1a;租用一台临时的电脑&#xff0c;电脑可自选GPU型号等&#xff0c;按照项目需…

品质至上!中国星坤连接器的发展之道!

在电子连接技术领域&#xff0c;中国星坤以其卓越的创新能力和对品质的不懈追求&#xff0c;赢得了业界的广泛认可。凭借在高精度连接器设计和制造上的领先地位&#xff0c;星坤不仅获得了多项实用新型专利&#xff0c;更通过一系列国际质量管理体系认证&#xff0c;彰显了其产…

【原理+使用】DeepCache: Accelerating Diffusion Models for Free

论文&#xff1a;arxiv.org/pdf/2312.00858 代码&#xff1a;horseee/DeepCache: [CVPR 2024] DeepCache: Accelerating Diffusion Models for Free (github.com) 介绍 DeepCache是一种新颖的无训练且几乎无损的范式&#xff0c;从模型架构的角度加速了扩散模型。DeepCache利…

树(相关知识点)

目录 结点的度&#xff1a;某一个结点所含有字数的个数 叶节点&#xff1a;最后一个结点 非终端节点:不是叶结点 兄弟结点&#xff1a;亲兄弟结点 树的度&#xff1a;最大节点的度 层次&#xff1a;根为第一层&#xff0c;根的子结点为第二层&#xff0c;以此类推 森林&am…

[附源码]基于Flask的演唱会购票系统

摘要 随着互联网技术的普及和发展&#xff0c;传统购票方式因其效率低下、流程繁琐等问题已难以满足现代社会的需求。本文设计并实现了一个基于Flask框架的演唱会购票系统&#xff0c;该系统集成了用户管理、演唱会信息管理、票务管理以及数据统计与分析等功能模块&#xff0c…

linux centos7.9 安装mysql5.7;root设置客户端登录、配置并发、表名大小写敏感等

查看centos版本 cat /etc/centos-releasecentos版本为7.9 查看是否已安装mariadb,安装了需要先删除 1.查看是否安装了mariadb和mysql&#xff0c;安装了需要先删除 mariadb是mysql的一个分支&#xff0c;但要安装mysql需要删除它 执行rpm -qa|grep mariadb,查看mariadb情况…

Hi6602 恒压恒流SSR电源方案

Hi6602是一款针对离线式反激电源设计的高性能PWM控制器。Hi6602内集成有通用的原边恒流控制技术&#xff0c;可支持断续模式和连续模式工作&#xff0c;适用于恒流输出的隔离型电源应用中。Hi6602内部具有高精度65kHz开关频率振荡器&#xff0c;且带有抖频功能可优化EMI性能。H…

AI大模型技术分析

一文读懂&#xff1a;AI大模型&#xff01; 引言 近年来&#xff0c;随着深度学习技术的迅猛发展&#xff0c;AI大模型已经成为人工智能领域的重要研究方向和热点话题。AI大模型&#xff0c;指的是拥有巨大参数规模和强大学习能力的神经网络模型&#xff0c;如BERT、GPT等&…

java IO流(1)

一. 文件类 java中提供了一个File类来表示一个文件或目录(文件夹),并提供了一些方法可以操作该文件 1. 文件类的常用方法 File(String pathname)构造方法,里面传一个路径名,用来表示一个文件boolean canRead()判断文件是否是可读文件boolean canWrite()判断文件是否是可写文…

spring boot读取yml配置注意点记录

问题1&#xff1a;yml中配置的值加载到代码后值变了。 现场yml配置如下&#xff1a; type-maps:infos:data_register: 0ns_xzdy: 010000ns_zldy: 020000ns_yl: 030000ns_jzjz: 040000ns_ggglyggfwjz: 050000ns_syffyjz: 060000ns_gyjz: 070000ns_ccywljz: 080000ns_qtjz: 090…

【论文通读】RuleR: Improving LLM Controllability by Rule-based Data Recycling

RuleR: Improving LLM Controllability by Rule-based Data Recycling 前言AbstractMotivationSolutionMethodExperimentsConclusion 前言 一篇关于提升LLMs输出可控性的短文&#xff0c;对SFT数据以规则的方式进行增强&#xff0c;从而提升SFT数据的质量&#xff0c;进而间接帮…

数组算法(二):交替子数组计数

1. 官方描述 给你一个二进制数组nums 。如果一个子数组中 不存在 两个 相邻 元素的值 相同 的情况&#xff0c;我们称这样的子数组为 交替子数组 。 返回数组 nums 中交替子数组的数量。 示例 1&#xff1a; 输入&#xff1a; nums [0,1,1,1] 输出&#xff1a; 5 解释&#…

数学系C++ 排序算法简述(八)

目录 排序 选择排序 O(n2) 不稳定&#xff1a;48429 归并排序 O(n log n) 稳定 插入排序 O(n2) 堆排序 O(n log n) 希尔排序 O(n log2 n) 图书馆排序 O(n log n) 冒泡排序 O(n2) 优化&#xff1a; 基数排序 O(n k) 快速排序 O(n log n)【分治】 不稳定 桶排序 O(n…

一.2.(4)放大电路静态工作点的稳定;(未完待续)

1.Rb对Q点及Au的影响 输入特性曲线&#xff1a;Rb减少&#xff0c;IBQ&#xff0c;UBEQ增大 输出特性曲线&#xff1a;ICQ增大&#xff0c;UCEQ减少 AUUO/Ui分子减少&#xff0c;分母增大&#xff0c;但由于分子带负号&#xff0c;所以|Au|减少 2.Rc对Q点及Au的影响 输入特性曲…