【笔记】CSRF攻击

恶意应用软件让浏览器向已完成身份认证的网站发起请求,执行有害的操作,这就是CSRF。这是怎么发生的呢?记住主要的一点,浏览器可以向任何源发送请求(带有cookie),并执行所请求的特定操作。如果用户登录某个网站,并且该网站允许用户执行一系列任务,而攻击者诱导浏览器向这些任务对应的某个URL发送请求,就可以以登录用户的身份执行该任务。通常,攻击者会将恶意的HTML或者JavaScript代码嵌入邮件或者网页中(也可能是用户主动浏览了带有恶意代码的网页),在用户不知情的情况下向某个特定的URI发送请求。

对书中案例的分析

下图为OAuth的授权码模式的示意图:

2021-09-23-21-07-22

第7步,浏览器带着授权服务器返回的code去访问客户端服务器,客户端服务器因而可以获取到code信息。

那么攻击者是怎么做的呢?我先单纯的从文字表述的角度描述一下整个攻击的过程,攻击者也可以开启一个OAuth过程,但是它终止在了获取了权限码后向授权服务器请求ACCESS_TOKEN的过程(攻击者可以有很多方式开始这个过程,我推荐使用代码),此时攻击者手中拥有一个授权码,它接下来怎么做了?

攻击者提供了一个页面,当访问这访问这个页面的时候会自动的向正常的客户端服务器发送一个URL,攻击者想方设法的让资源拥有者访问到这个页面,邮件、钓鱼网站等。

当资源拥有者访问了这个页面后,就向正常的客户端服务器发送了请求。客户端服务器按照流程,就会去请求授权服务器,然后获取ACCESS_TOKEN。即使客户端服务器判断一下当前是否已经有ACCESS_TOKEN,也最多只能延迟一下被攻陷的时间,最终在ACCESS_TOKEN过期的时候,还是会被攻击到。

客户端服务器为什么不能开启CSRF,仅让授权服务器下的域名可访问呢?这个就跟业务有关了,获取我们的客户端服务器提供的服务是可以分享到各个社交平台的,这样就没有办法做到万无一失。

我真正不理解的是:最终调用资源服务器的代码始终写在客户端的,即使做了这样的攻击,放开了可以调用的权限,攻击者可以获取的数据还是有限的呀。其实有这种可能性的,就是客户端服务器其实申请了三项权限,但是资源拥有者只授权了其中的一项,现在攻击者想通过这种攻击方式获取另外两种权限下的数据。

书中提到了与OAuth不能做身份认证,我还没有体会到这个层面。

参考资料

  1. 《OAuth 2实战》 7.2 针对客户端服务器的CSRF攻击