CSRF

13 阅读4分钟

CSRF概述

CSRF (Cross-Site Request Forgery) 跨站请求伪造,也可称为一键式攻击 (one-click-attack),通常缩写为 CSRF 或者 XSRF。

CSRF 攻击是一种挟持用户在当前已登录的浏览器上发送恶意请求的攻击方法。 相对于XSS利用用户对指定网站的信任,CSRF则是利用网站对用户网页浏览器的信任。

CSRF攻击类型及原理

攻击者构造出一个后端请求地址,诱导用户点击或者通过某些途径自动发起请求。如果用户是在登录状态下的话,后端就以为是用户在操作,从而进行相应的逻辑。

CSRF前提

  1. 用户必须登录站点且保持登录状态
  2. 伪装链接地址,能诱导用户点击链接
  3. 用户必须在同一个浏览器上点击你发的链接地址

CSRF攻击类型

主动攻击型

  • 受害者访问a.com并在自己浏览器留下a.com的登录态(比如cookie)
  • 网站b.com植有访问a.com接口的恶意代码(删除/增加/修改等),浏览器请求头中会默认携带a.com网站的cookie
  • 受害者点击b.com时候,b.com带着a.com的登陆凭证冒充受害用户执行对a.com的恶意操作

被动攻击型

  • 攻击者在a.com发布带有恶意链接的帖子或者评论(提交对a.com带有增删改的诱导型img/form/a标签)
  • 当其他拥有登录态的受害者点击该评论的恶意链接冒用受害者登录凭证发起攻击
  • CSRF主要是冒用受害者登录凭证发起恶意的增删改并不会窃取受害者隐私信

CSRF攻击方式

GET类型的CSRF

GET类型的CSRF利用非常简单,只需要一个HTTP请求,一般会这样利用 在受害者访问含有这个img的页面后,浏览器会自动向在受害者访问含有这个img的页面后,浏览器会自动跳转链接修改密码

 <a href="http://www.dlrb.com/news/server/admin/changepasswd.php?password=666888&toopassword=666888">
        <img src="img/gf.jpg">
        <p>点我加V</p>
 </a>

POST类型的CSRF

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

POST类型攻击特点

  • 攻击一般发起在第三方网站,而不是被攻击的网站。被攻击的网站无法防止攻击发生。
  • 攻击利用受害者在被攻击网站的登录凭证,冒充受害者提交操作;而不是直接窃取数据。
  • 整个过程攻击者并不能获取到受害者的登录凭证,仅仅是“冒用”。
  • 跨站请求可以用各种方式:图片URL、超链接、CORS、Form提交等等。部分请求方式可以直接嵌入在第三方论坛、文章中,难以进行追踪。

XSS与CSRF区别

  1. 信任方向不一致。XSS是利用用户对服务器的信任,而CSRF是利用服务器对用户的信任,伪装了用户的身份来发送一个合法的请求。
  2. 代码存放的位置不一致,XSS的恶意代码是保存在目标服务器中,但是恶意代码是在用户的浏览器端运行。因此XSS攻击的是用户使用的浏览器。CSRF的代码是存储在攻击者服务器中,而代码攻击的目标是目标站点的服务器。
  3. 结果不同,XSS是获取用户的一些信息(cookie)或者控制用户的浏览器。CSRF是更新、删除、修改用户的一些敏感信息、业务信息。

CSRF应用场景举例

  1. 修改用户收货地址,用户A在电商系统里下单了,并且支付了,但是想修改收货地址。这时攻击者小黑给他发了一个CSRF的伪装链接,这个链接的作用就是修改用户的收货地址。用户A点击该链接,攻击完成。最终攻击者小黑收到了用户A购买的商品。
  2. 转帐功能,用户A在支付宝中有一笔具款。攻击者小黑伪造了一个具备转换功能的链接。用户A点击该链接后,攻击完成。最终攻击者小黑收到了用户A的具款转帐。

CSRF防御与绕过

高级防御

高级防御是通过token机制来确保用户的请求是唯一的。从而来预防CSRF攻击。

token通常是指一个用于身份验证和授权的凭证。在网络通信中,令牌可以是一个特殊的字符串或加密的数据,用于证明用户的身份或访问权限。

何为跨域

跨域是浏览器受同源(协议、域名、端口)策略的限制,不允许不同源的站点之间进行某些操作(如发送ajax请求,操作dom,读取cookie),如果不进行特殊配置是不能操作成功的,并且控制台会报如下跨域错误:No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘xxxxxx’ is therefore not allowed access