伪造CSRF

【1】什么是CSRF

image-20240314163928523

​ CSRF全称是跨站请求伪造。这是一种网络攻击方式,攻击者通过伪造用户请求来达到非法操作的目的。

​ CSRF 就像是攻击者利用了被攻击者的身份,通过伪装成被攻击者的身份,在被攻击者不知情的情况下执行操作。

​ 攻击者通过诱使用户访问恶意网站或点击恶意链接,从而触发用户浏览器发送针对目标应用程序的请求。这种攻击方式不会直接获取用户的敏感信息,而是利用用户当前的身份在目标应用程序上执行操作。

  • 说白了就是为用为了上学用了别人的名字来到达我上学的目的

内部的本质

  • 我们在钓鱼网站的页面 针对对方账户 只给用户提供一个没有nane属性的普通input框然后为什么在内部隐藏一个已经写好name和value的input框。

CSRF 可以做什么?

​ 你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。 CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账…造成的问题包括:个人隐私泄露以及财产安全。

CSRF 解决方法

​ 有许多有效的方法可以预防和缓解 CSRF 攻击。从用户的角度来看,预防是维护登录凭据并拒绝未经授权的参与者访问应用程序的问题。

最佳实践如下:

  • 当不使用时登出 Web 应用程序
  • 确保用户名和密码
  • 不允许浏览器记住密码
  • 登录到应用程序时避免同时浏览

​ 对于 Web 应用程序,存在多种解决方案来阻止恶意流量并防止攻击。最常见的缓解方法之一是为每个会话请求或 ID 生成唯一的随机令牌。这些服务器随后由服务器检查和验证。具有重复令牌或缺失值的会话请求被阻止。或者,不匹配其会话 ID 令牌的请求是阻止到达应用程序的。

​ 双重提交 Cookie 是阻止 CSRF 的另一种众所周知的方法。类似于使用唯一令牌,随机令牌被分配给 cookie 和请求参数。然后,服务器在授予对应用程序的访问之前验证令牌是否匹配。

​ 虽然有效,但可以在许多点上公开代币,包括在浏览器历史记录中,HTTP 日志文件,网络设备记录 HTTP 请求的第一行和引用器标头(如果受保护的站点链接到外部 URL)。这些潜在的弱点使代币成为一个不隔热的解决方案。

【2】CSRF跨站请求伪造校验

​ CSRF校验是一种防止跨站请求伪造攻击的机制,它通过验证请求中包含的CSRF令牌来确认请求的合法性。

  • 网站在给用户返回一个具有提交数据功能页面的时候会给这个页面加一个唯一标识。
  • 当这个页面朝后发送post请求的时候 我的后端会先校验唯一标识, 如果唯一标识不对直接拒绝(403 forbbiden)如果成功则正常执行。

【3】Ajax携带CSRF

(1)方式一:获取标签值

  • 利用标签查找获取页面上的随机字符串
  • 键必须叫 csrfmiddlewaretoken
<button id="b1">ajax请求提交</button><script>$("#b1").click(function () {$.ajax({url: '',type: 'post',// (1) 利用标签查找获取页面上的随机字符串data: {"username": "dream","csrfmiddlewaretoken": 					 			 		$("input[name='csrfmiddlewaretoken']").val()},success: function () {}})})
</script>

(2)方式二:模板语法取值

  • 利用模板语法进行快捷引入
<button id="b1">ajax请求提交</button><script>$("#b1").click(function () {$.ajax({url: '',type: 'post',// (2) 利用模板语法提供的快捷书写data: {"username": "dream", "csrfmiddlewaretoken": "{{ csrf_token }}"},success: function () {}})})
</script>

(3)方式三:导入js文件

function getCookie(name) {var cookieValue = null;if (document.cookie && document.cookie !== '') {var cookies = document.cookie.split(';');for (var i = 0; i < cookies.length; i++) {var cookie = jQuery.trim(cookies[i]);// Does this cookie string begin with the name we want?if (cookie.substring(0, name.length + 1) === (name + '=')) {cookieValue = decodeURIComponent(cookie.substring(name.length + 1));break;}}}return cookieValue;
}
var csrftoken = getCookie('csrftoken');function csrfSafeMethod(method) {// these HTTP methods do not require CSRF protectionreturn (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}$.ajaxSetup({beforeSend: function (xhr, settings) {if (!csrfSafeMethod(settings.type) && !this.crossDomain) {xhr.setRequestHeader("X-CSRFToken", csrftoken);}}
});
<button id="b1">ajax请求提交</button><script src="{% static 'js/csrf_check.js' %}"></script>
<script>$("#b1").click(function () {$.ajax({url: '',type: 'post',// (3) 定义外部js文件并引入到本地data: {"username": "dream"},success: function () {}})})
</script>

【4】CSRF相关装饰器

在使用csrf校验时,我们可能会遇到如下两种需求:

整个django项目都校验csrf 但是某些个视图函数\类不想校验
整个django项目都不校验csrf 但是某些个视图函数\类需要校验

这时候可以给视图函数、视图类添加装饰器来实现需求。

FBV添加装饰器的方式

与正常函数添加装饰器一致。

from django.views.decorators.csrf import csrf_exempt, csrf_protect
# @csrf_exempt
@csrf_protect
def transfer_func(request):pass

csrf_protect装饰的函数,添加crsf校验。
csrf_exempt装饰的函数,免除crsf校验。

CBV添加装饰器的方式

与正常情况不一样 需要注意。需要额外导入method_decorator
主要有三种方式:

from django.views.decorators.csrf import csrf_exempt, csrf_protect
rom django.utils.decorators import method_decorator# @method_decorator(csrf_protect, name='post')  # 方式2:单独生效
class MyView(views.View):@method_decorator(csrf_protect)  # 方式3:整个类中生效def dispatch(self, request, *args, **kwargs):return super().dispatch(request, *args, **kwargs)# @method_decorator(csrf_protect)  # 方式1:单独生效def post(self, request):return HttpResponse('from cbv post view')CBV添加装饰器时,注意有一个装饰器是特例只能有一种添加方式>>>:csrf_exempt只有在dispatch方法添加才会生效

方式1:装饰类中方法

对被装饰的方法单独生效。
image-20221225174045232

这里表示对post请求添加csrf校验。

方式2:装饰整个类

装饰整个类时,需要传入参数,申明装饰的是类中哪个方法,是需要添加csrf校验,还是免除csrf校验。

image-20221225174349013

这里还是对post请求添加csrf校验。

方式3:装饰dispatch方法

我们在自己的视图类中,写一个dispatch方法,再使用super调用父类的dispatch,最后给dispatch方法添加装饰器。
装饰dispatch方法时,会对类中所有方法生效。

image-20221225174801064

这里表示对视图类中所有方法都添加csrf校验。

特例 csrf_exempt

在全局crsf校验打开的情况下:我们想让我们的CBV不校验crsf。

image-20221225175801997

如下图所示:csrf_exempt只有在dispatch方法添加才会生效

image-20221225175708635
ogs.com/blog/2614258/202212/2614258-20221226225446900-2084964817.png)

如下图所示:csrf_exempt只有在dispatch方法添加才会生效

[外链图片转存中…(img-4314pH92-1713015018315)]

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python统计分析——用sklearn进行回归

参考资料&#xff1a;python统计分析【托马斯】 scikit-learn提供了简单而有效的数据挖掘和数据分析工具&#xff0c;包括监督和无监督学习。它提供了如下工具&#xff1a; 分类&#xff1a;辨别出新的观测值应该属于哪一组类别。 回归&#xff1a;对一个新的例子预测一个连续值…

【opencv】示例-minarea.cpp 如何寻找一组随机生成的点的最小外接矩形、三角形和圆...

// 包含OpenCV库的高GUI模块和图像处理模块的头文件 #include "opencv2/highgui.hpp" #include "opencv2/imgproc.hpp"// 包含标准输入输出流的头文件 #include <iostream>// 使用命名空间cv和std&#xff0c;这样我们就可以直接使用OpenCV和标准库的…

Java基础-知识点03(面试|学习)

Java基础-知识点03 String类String类的作用及特性String不可以改变的原因及好处String、StringBuilder、StringBuffer的区别String中的replace和replaceAll的区别字符串拼接使用还是使用StringbuilderString中的equal()与Object方法中equals()区别String a new String("a…

mutable关键字的作用(c++)

常成员变量、常成员函数与常对象 常成员变量 声明为常成员变量的成员变量&#xff0c;在对象被创建后就不能被修改常成员变量必须在对象的构造函数初始化列表中赋值&#xff0c;不能在构造函数体中赋值初始化列表的执行是在函数体执行之前就执行了的。上面这种写法和下面的写…

vmware安装win10及ubuntu

安装win10 新建一个文件夹 选择刚才创建的文件夹 选择需要保存文件的位置&#xff0c;还是选择刚才创建的文件夹 选择自定义硬件 选择下载的win10镜像iso文件,导入后&#xff0c;点击完成即可 接下来就是下一步 没有此电脑&#xff0c;可以点击个性化-》主题-》桌面设置…

编曲知识17:音高修正 节奏修正 压缩器应用 压缩数值算法

34届音高修正 节奏修正 压缩器应用 压缩数值算法独立音乐人训练营基地,七年在线教育编曲系统授课,培养了几千名独立音乐人https://app8epdhy0u9502.pc.xiaoe-tech.com/detail/l_660be2e3e4b023c02af7abbc/4?course_id=course_2XLKtQnQx9GrQHac7OPmHD9tqbv 修音 准备工作 …

Next.js是什么

前言&#xff1a;最近一年都在nextjs浩瀚的海洋中游来游去&#xff0c;在使用过程中算是小有心得&#xff0c;趁着有那么一点点时间温故而知新&#xff0c;总结一波&#xff08;主要中文文档实在太少&#xff0c;它更新的速度又快&#xff0c;很多时候自己翻文档看issue实在头疼…

RISC-V技术变革:一颗芯片,CPU与GPU合二为一

一颗万能的RISC-V芯片: 将CPU和GPU整合到一个核中 X-Silicon 推出创新的 RISC-V 芯片架构,将 CPU、矢量功能和 GPU 加速无缝集成。这种开源混合芯片专为多功能工作负载而设计,包括人工智能,旨在通过高效处理提升性能。 革命性的 CPU/GPU 混合处理器全新的 RISC-V CPU/GPU 混…

OpenAI CEO山姆·奥特曼推广新AI企业服务,直面微软竞争|TodayAI

近期&#xff0c;OpenAI的首席执行官山姆奥特曼在全球多地接待了来自《财富》500强公司的数百名高管&#xff0c;展示了公司最新的人工智能服务。在旧金山、纽约和伦敦的会议上&#xff0c;奥特曼及其团队向企业界领袖展示了OpenAI的企业级产品&#xff0c;并进行了与微软产品的…

【fastapi】搭建第一个fastapi后端项目

本篇文章介绍一下fastapi后端项目的搭建。其实没有什么好说的&#xff0c;按照官方教程来即可&#xff1a;https://fastapi.tiangolo.com/zh/ 安装依赖 这也是我觉得python项目的槽点之一。所有依赖都安装在本地&#xff0c;一旦在别人电脑上编写项目就又要安装一遍。很扯淡。…

我的新书,在西西弗书店上架了!

大家好&#xff0c;我是程序员小灰。今天告诉大家一个好消息&#xff0c;我的新书在西西弗书店上架了&#xff01; 熟悉小灰的朋友都知道&#xff0c;我以前是京东的一名程序员&#xff0c;现在全职投入到IT领域的自媒体创作。在2019年&#xff0c;我出版了人生中的第一本书《漫…

普乐蛙VR航天体验馆设备VR太空飞船VR元宇宙展厅

三天小长假就要来啦&#xff01;五一假期也即将到来。老板们想捉住人流量这个财富密码吗&#xff1f;那快快行动起来&#xff01;开启VR体验项目&#xff0c;假期赚翻天&#xff01;小编亲测&#xff01;&#xff01;这款设备刺激好玩&#xff0c;想必会吸引各位家长小孩、学生…