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

Web漏洞-CSRF漏洞

CSRF漏洞

介绍:

CSRF(Cross-Site Request Forgery),中文名称:跨站请求伪造,是一种劫持用户在当前已登录的Web应用程序上执行非本意操作一种攻击.

原理:攻击者利用目标用户的身份,执行某些非法的操作 跨站点的请求:请求的来源可以是非本站 请求是伪造的:请求的发出不是用户的本意。

攻击者先让受害者登录一个需要权限验证的网站,当用户完成验证后,权限凭证会被保存到本地,下次发送请求时会一同发送到服务器作为验证信息。然后诱导受害者打开一个攻击者编写的恶意网站,这个恶意网站会发送相关请求去执行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品),利用受害者之前保存的权限凭证,绕过服务端验证,从而完成攻击。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的

危害

以用户的名义发邮件/发消息

转换/购买商品等;

修改密码;

删除文章等

CSRF攻击过程

满足了上面的必要条件才可以触发

  1. 当用户已经登录成功了一个网站

  1. 然后通过被诱导进了第三方网站「钓鱼网站」

  1. 跳转过去了自动提交表单,冒用受害者信息

  1. 后台则正常走逻辑将用户提交的表单信息进行处理

CSRF漏洞产生得原因:

  1. http协议使用session在服务端保存用户个人信息,客户端浏览器用cookie标识用户身份

  1. cookie的认证只能确保是某个用户发送的请求,但不能保证该请求是否为自愿行为

  1. 用户如果登录某个web站点,同时点击了包含CSRF恶意代码的URL,就会触发CSRF

漏洞利用条件:

  1. 用户必须登录网站A生成cookie

  1. 登录的同时访问了恶意URL

CSRF攻击类型:

  1. GET类型:仅需一个HTTP请求

<img src="http://a.com/withdraw?amount=10000&for=hacker" >

在受害者访问含有img页面后,浏览器会自动向a.com发出一次请求

  1. POST类型

这种类型的CSRF利用通常使用一个自动提交的表单:

<form action="http://a.com/withdraw" method=POST><input type="hidden" name="account" value="airing" /><input type="hidden" name="amount" value="10000" /><input type="hidden" name="for" value="hacker" />
</form>
<script> document.forms[0].submit(); </script>

访问该页面后,表单会自动提交,相当于模拟用户完成了一次 POST 操作。可见这种类型的 CSRF 与第一种一样,都是模拟请求,所以后端接口也不能将安全寄托在仅允许 POST 请求上。

  1. 链接类型

比起其他两种用户打开页面就中招的情况,这种需要用户点击链接才会触发,但本质上与前两种一样。这种类型通常是在论坛中发布的图片中嵌入恶意链接,或者以广告的形式诱导用户中招,攻击者通常会以比较夸张的词语诱骗用户点击,例如:

<a href="http://a.com/withdraw.php?amount=1000&for=hacker" taget="_blank">点击就送,888代金券
<a/>

XSS和CSRF的区别:

  1. xss攻击遵顼双向攻击模式,允许攻击者执行恶意脚本、访问响应,并将后续敏感数据发送给攻击者。

  1. csrf攻击是一种单向攻击机制,攻击者只能发送http请求,但不能检索已发请求的响应

  1. csrf攻击要求经过身份验证的用户处于活动会话中,而xss不需要,在xss中,只要用户登录,就可以存储和交付有效载荷

  1. csrf攻击范围有限,仅限于用户可执行的操作,例如点击恶意链接或访问hacker的网站,xss提供执行恶意脚本来执行攻击者所选择的任何活动,扩大攻击范围

CSRF防御思路

  1. 验证Referer字段

  1. 请求地址中添加token并验证

  1. Samesite Cookie

  1. 双重Cookie验证

  1. 当前用户打开其他用户填写的链接时,需告知风险(知乎跳转外链,等等都会告知风险)。

http://www.lryc.cn/news/37345.html

相关文章:

  • Python3-面向对象
  • 拐点!新能源车交付均价首次「低于」燃油车,智能电动成新爆点
  • JavaScript String 字符串对象实例合集
  • 实习生培养计划
  • 【服务器管理】Wordpress服务器内存占用太高(优化方案详解)
  • 【ECCV 2022】76小时动捕,最大规模数字人多模态数据集开源
  • 联合解决方案 | 亚信科技AntDB数据库携手浪潮K1 Power赋能关键行业数字化转型,助力新基建
  • Android 单元测试问题总结(Robolectric+JUnit)
  • 专项攻克——二叉树
  • PACS系统源码 PACS源码 三维重建PACS源码
  • 利用Mysql存储过程造百万级数据
  • Vue2组件之间的传值通信
  • Spring Boot官方例子《Developing Your First Spring Boot Application》无法运行
  • 数据结构(3)— 线性表之顺序存储详解介绍(含代码)
  • ChatGPT正当时,让我们一起深耕智能内容生成和智能内容增强领域
  • 天梯赛训练L1-019 (谁先倒)
  • MySQL DQL语句基础(一)
  • ccc-pytorch-LSTM(8)
  • 教育小程序开发解决方案
  • 动态规划之股票问题大总结
  • 我来跟你讲vue进阶
  • #847(Div3)E. Vlad and a Pair of Numbers
  • 怎么把pdf转换成图片?这个方法你值得拥有
  • go语言使用append向二维数组添加一维数组
  • YOLOv5训练大规模的遥感实例分割数据集 iSAID从切图到数据集制作及训练
  • js学习5(函数)
  • 用Qt画一个仪表盘
  • linux 端口查询命令
  • C语言函数: 字符串函数及模拟实现strtok()、strstr()、strerror()
  • 【学习笔记】人工智能哲学研究:《心智、语言和机器》