08 | 实践OAuth 2.0时,使用不当可能会导致哪些安全漏洞?
- 深入了解
- 翻译
- 解释
- 总结
OAuth 2.0安全风险及防范措施 OAuth 2.0是一种安全协议,但在实践中可能存在安全漏洞。本文深入探讨了OAuth 2.0可能面临的安全风险及相应的防范措施。文章详细介绍了常见的安全漏洞,包括跨站请求伪造(CSRF)、跨站脚本攻击(XSS)、授权码失窃和重定向URI被篡改等。针对这些安全风险,文章提出了相应的防范措施,如使用state参数进行随机值的比对校验来防范CSRF攻击,以及对非法信息进行转义过滤以防范XSS攻击。 此外,文章还介绍了OAuth 2.0专有的安全攻击,包括水平越权、授权码失窃和重定向URI被篡改。水平越权可能导致非法获取其他用户数据,而授权码失窃和重定向URI被篡改则可能导致第三方软件获取未授权的用户数据或攻击者获取用户授权码。 总的来说,本文通过详细案例和解释,为读者提供了全面的安全意识和防范措施。读者可以通过本文了解到OAuth 2.0可能存在的安全漏洞及相应的防范措施,从而更好地实施OAuth 2.0架构并避免给用户造成伤害。OAuth 2.0的安全问题是实践中需要重点关注的问题,本文为读者提供了重要的技术参考和安全建议。
《OAuth 2.0 实战课》,新⼈⾸单¥29
全部留言(22)
- 最新
- 精选
- Geek_94f887codeA绑定了appIdA和userIdA,为啥B能拿着appIdB和codeA,userIdB,userIdB不会验证通过,怎么可以获取到access_token? 另外,老师举例的CSRF例子我看了三遍,都没看明白,有点混乱,不够清晰,建议重写一下,感谢!~
作者回复: 攻击者A并不是一个第三方开发者,他也是极客时间的一个合法用户,我们这里是有【三方软件A】是想说明这个攻击者“有能力”构建了一个软件页面。 并不存在appidA,appid 一直是极客时间的appid,图中app_id_b也是极客时间的appid,这里用了“b”,只是想区分这两次“请求”。 因为CSRF比较知名,咱们在文中并没有过多对它做基础性解释。在理解这篇文章CSRF攻击的例子时候,可以想象一个成语“移花接木”。
2020-08-05412 - 袁帅对于CSRF攻击有以下疑惑 1. 攻击者A软件怎么知道 极课时间(B)的用于接受授权码的回调URL? 2."如果这个时候用户 G 被攻击者软件 A 诱导而点击了这个恶意页面,那结果就是,极客时间使用 codeA 值去继续 OAuth 2.0 的流程了。这其实就走完了一个 CSRF 攻击的过程" 软件A的诱导页面是怎么放到极课时间平台里的? 3.极客时间通过codeA获取到了accessToken,但这一切都是在极客时间的后台完成的呀,攻击者A又是怎么得到token的?
作者回复: 原图有一处描述不当,会引起大家理解偏差,现已修正。 1、不需要知道URL;2、不需要嵌入极客时间平台,你可以理解为钓鱼页面,有个重要的前提是被攻击者已经在极客时间平台登录了,有登录态了;3、攻击者A并不是一个第三方开发者,他也是极客时间的一个合法用户,我们这里是有三方软件A是想说明这个攻击者构建了一个软件页面。
2020-07-1623 - kylexy_0817王老师好,目前的开放平台接入服务,基本都要求在其管理后台配置回调地址吧?这样只要指定回调地址,用回调地址来校验,感觉不需要state参数也能避免CSRF攻击了吧?
作者回复: 回调地址是一个固定的值,state在每次OAuth事务中是不一样的值,随机生成的值。
2020-08-01 - Invincible(・ิϖ・ิ)っ对于CSRF攻击有一个疑问:”有一个软件 A,我们让它来扮演攻击者,让它的开发者按照正常的流程使用极客时间。当该攻击者授权后,拿到授权码的值 codeA 之后,“立即按下了暂停键”,不继续往下走了。“ 这里授权码应该是返回到极客时间网站指定的的回调地址上了,攻击者是怎么控制流程不往下走的?
作者回复: 是一种形象的比喻,实际上是指攻击者截获了授权码这个行为。
2020-07-195 - 林光铣老师你好,如果要将一批硬件接入OAuth2.0系统,每个硬件作为一个动态客户端注册合适呢,还是硬件配套的后台服务作为一个客户端合适?
作者回复: 动态注册的初衷解决的是有多个【外部】的API提供商的时候,不用客户端去分别多次到这样的提供商来进行事先注册,不然没对接一个就要注册一次。如果API提供方都是自己公司的其实把硬件设备和后台服务作为一个更合适,通设备号来区别每一个这样的硬件设备。
2020-07-16 - ttCSRF的本质是身份失窃,被恶意软件或者代码使用。下图中,恶意软件A正是通过将CODE_A和软件B的身份appid_b结合在一起。从而窃取了B的身份,进行了恶意操作。 老师在课中提到,不能将OAuth2.0用于身份认证,在XSRF场景下具体指的是哪一步?因为OAuth2.0不就是利用appid和app_secret对三方软件的身份做认证的么? 或者这里指的是用户G的身份?
作者回复: 是的,我们讲的用户身份认证是指的最终用户的身份,也就是用户G或者小明。OAuth2.0首先呢确实并不能称为一个身份认证协议,它是一个授权协议,利用appid和app_secret只是验证了第三方软件的合法性,合法之后获取访问令牌以便代表小明去访问数据,代表的前提是小明对其进行了授权。 在09我们会讲到在OAuth 2.0 的基础上,我们增加ID_TOKEN可以实现用户身份认证。
2020-07-16 - KeepGoing关于CSRF的例子特别是那个配图看来看去还是很难理解。关于State的解释更是让人困惑。 攻击者到底是在具体哪一步替换CODE的?既然授权服务会原封不动的返回State值。那攻击者又为什么需要自己来构造State值?2021-07-12813
- Dolphin老师好,关于 CSRF 中 state 的问题,原文中支出: 当极客时间请求授权码的时候附带一个自己生成 state 参数值,同时授权服务也要按照规则将这个随机的 state 值跟授权码 code 一起返回给极客时间。这样,当极客时间接收到授权码的时候,就要在极客时间这一侧做一个 state 参数值的比对校验,如果相同就继续流程,否则直接拒绝后续流程。 我的问题: 在请求授权码的时候 附带了一个 state 的值,然后 state 会和授权码一起被返回,这时候攻击者按下暂停,然后在钓鱼页面中同样携带这个 state 是不是同样不安全? 我理解的是这样?是我哪儿理解错了嘛?2021-01-2353
- JianXu“在https://time.geekbang.org/page/下,创建了一个页面 hacker.html。” — 老师,黑客是怎么才能在这里新创建一个自己的页面呢?2020-10-132
- 曙光“如果这个时候用户 G 被攻击者软件 A 诱导而点击了这个恶意页面,那结果就是,极客时间使用 codeA 值去继续 OAuth 2.0 的流程了。” 第三讲中有说,code会和用户以及appid做关联,如果codeA关联的是用户A,那用户G点击回调函数,也只能获取用户A的access_Token吧。如果传输了G用户的相关信息,授权服务应该拒绝。 所以CSRF攻击有一些前提,如授权服务没有校验codeA是属于哪个用户的code2020-09-1721