当前位置: 首页 > article >正文

【网络安全】CSRF漏洞—CSRF基础漏洞防御

CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种常见的网络安全攻击手段,它利用用户已经认证的身份,通过第三方网站诱导用户点击链接或提交表单,从而在用户不知情的情况下,以用户的名义执行一些操作,比如转账、发帖、改密码等。

一、CSRF漏洞介绍
 1.1 定义

理解:

  • 跨站点的请求
  • 请求是伪造的(假装可信)

Cross-Site Request Forgery,跨站请求伪造。它是一种挟持用户在当前已登陆的Web应用程序执行非本意的操作的攻击方法。

1.2 成因

CSRF漏洞的成因就是网站的cookie在浏览器中不会过期,只要不关闭浏览器或者退出登录,那以后只要是访问这个网站,都会默认你已经登陆的状态。而在这个期间,攻击者发送了构造好的CSRF脚本或包含CSRF脚本的连接,可能会执行一些用户不想做的功能(比如添加账号等)。这个操作不是用户真正想要执行的

1.3 攻击过程
  1. 用户登陆受信任的网站A,并在本地生成Cookie
  2. 在不登出A的情况下,访问危险网站B
  3. 执行危险网站B上面的代码
1.4 CSRF攻击分类
  • 正常的CSRF攻击,增删改等操作(基于操作的CSRF)
  • 另类的CSRF:JSONP、CORS、Flash跨域劫持(基于文件读取的CSRF)
1.5 攻击利用

CSRF的本质就是在不知情的情况下执行请求

根据请求分为了:get类型CSRF,post类型CSRF

1.5.1 GET型CSRF

攻击者可能会构造一个GET请求的URL,该URL指向一个恶意的操作,如转账或修改设置。用户在不知情的情况下点击这个链接,如果用户已经登录,服务器可能会执行该操作,因为GET请求通常不包含敏感数据。一般会这样利用:

<img src="http://bank/exaple/withdraw?amount=10000&for=hacker">
1.5.2 POST型CSRF

攻击者可能会诱导用户点击一个链接或提交一个表单,这个链接或表单使用POST方法。如果用户已经登录,服务器可能会处理这个请求,执行如修改密码或转账等敏感操作。

<form action="http://bank.example/withdraw"method=POST>
<input type="hidden" name="account" value="xiaoming"/> //name为参数,value为参数的值
<input type="hidden" name="amount"value="10000"/>
<input type="hidden" name="for" value="hacker"/>
</form>
<script>document.forms[0].submit();</script> //自动提交表单
二、CSRF漏洞利用
2.1 同源策略介绍

同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源。所以 xyz.com下的js脚本采用ajax读取abc.com里面的文件数据会被拒绝

同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制。

2.2 解决跨域问题

由于同源策略的影响,当我们从一个域名的网页去请求另一个域名的资源时,就无法成功获取资源。如果我们想要成功获取资源,那么就要用到跨域

跨域解决方案:jsonp、cors、postMessage

2.3 CORS介绍

CORS(Cross-Origin Resource Sharing,跨源资源共享)是一种安全机制,它允许或限制网页从另一个域名(即跨域)加载资源。这是由浏览器实施的安全策略,称为同源策略,它防止一个域的脚本与另一个域的资源交互,除非后者明确允许。

在配置了cors的前提下,当你登录网站A,并跨域访问网站B的时候,浏览器判断你的操作是跨域,这时候会在数据包里面加个origin字段,内容为:origin:b.com,这样你就能跨域了,当cors的配置错误时就会产生cors漏洞

2.4 jsonp

JSONP(JSON with Padding)是一种在Web开发中用来绕过浏览器同源策略限制,实现跨域请求的技术。由于同源策略的限制,一个网页上的JavaScript代码通常不能直接请求另一个域的资源。JSONP通过动态创建<script>标签的方式,允许网页从不同域获取数据。

JSONP在客户端网页中的JavaScript代码动态创建一个<script>标签,并将其src属性设置为要请求的URL,该URL包含了一个查询参数,通常是callback,后跟一个函数名。服务器接收到请求后,将数据包装在客户端指定的函数调用中,然后返回给客户端。例如,如果客户端请求的URL是http://example.com/data?callback=myCallback,服务器会返回myCallback({"key":"value"})。回到客户端,浏览器解析返回的脚本,执行其中的函数调用,从而获取到数据。

2.5 postMessage

postMessage 是一个JavaScript API,它允许来自不同源的页面间安全地进行通信。这个API是Web Messaging的一部分,它提供了一种在不同窗口、iframe或标签页之间传递消息的方法,而不受同源策略的限制。

postMessage 方法可以发送一个消息到另一个页面,这个消息可以是一个字符串或者一个JavaScript对象。接收消息的页面可以监听 message 事件来接收消息。


http://www.kler.cn/news/294221.html

相关文章:

  • linux系统中,计算两个文件的相对路径
  • class 6: vue.js 3 组件化开发
  • SpringBoot学习(4)(yml配置信息书写和获取)(SpringEL表达式语言)
  • 零工市场小程序:自由职业者的日常工具
  • HarmonyOS开发实战( Beta5版)延迟加载lazy-import实践使用指导
  • 探索EasyCVR与AI技术深度融合:视频汇聚平台的新增长点
  • 华为 HCIP-Datacom H12-821 题库 (8)
  • 香港服务器机房托管:优化全球访问体验的最佳选择
  • laravel command 执行自定义命令 choice 以后使用info 中文乱码
  • 2024全国大学生数学建模竞赛B题完整论文讲解
  • prometheus删除指定metrics下收集的值
  • MES系统:现代工厂生产车间的科技与管理创新
  • GAN 干!!!!
  • Qt 去掉QDialog对话框的问号
  • 【GD32】外部存储器控制器(EXMC)驱动16位8080时序并口屏(GD32F470ZGT6)
  • 企业级WEB应用服务器---TOMACT
  • LeetCode --- 413周赛
  • Spring + ActiveMQ 整合实现发布/订阅(publish-subscribe)消息发送案例
  • OPenCV结构分析与形状描述符(2)计算轮廓周长的函数arcLength()的使用
  • 机器学习面试:SVM为什么使用对偶函数求解?
  • 力扣1049-最后一块石头的重量II(Java详细题解)
  • 3个恢复方法详解:iPhone手机快速找回备忘录
  • 数据血缘系列(19)—— 数据血缘技术实现之数据血缘可视化
  • 高德地图SDK Android版开发 10 InfoWindow
  • 【Redis】Windows平台编译调试运行Redis,并附编译问题解决方案
  • 用python fastapi写一个http接口,使ros2机器人开始slam toolbox建图
  • @import导入样式以及scss变量应用与static目录
  • 4. GIS前端工程师岗位职责、技术要求和常见面试题
  • Windows 11的新游戏手柄键盘现在可让玩家使用Xbox手柄打字
  • UE引擎工具链