OAuth 2.0 实战课
王新栋
京东资深架构师
16397 人已学习
新⼈⾸单¥29
登录后,你可以任选2讲全文学习
课程目录
已完结/共 17 讲
开篇词 (1讲)
OAuth 2.0 实战课
15
15
1.0x
00:00/00:00
登录|注册

08 | 实践OAuth 2.0时,使用不当可能会导致哪些安全漏洞?

你好,我是王新栋。
当知道这一讲的主题是 OAuth 2.0 的安全漏洞时,你可能要问了:“OAuth 2.0 不是一种安全协议吗,不是保护 Web API 的吗?为啥 OAuth 2.0 自己还有安全的问题了呢?”
首先,OAuth 2.0 的确是一种安全协议。这没啥问题,但是它有很多使用规范,比如授权码是一个临时凭据只能被使用一次,要对重定向 URI 做校验等。那么,如果使用的时候你没有按照这样的规范来实施,就会有安全漏洞了。
其次,OAuth 2.0 既然是“生长”在互联网这个大环境中,就一样会面对互联网上常见安全风险的攻击,比如跨站请求伪造(Cross-site request forgery,CSRF)、跨站脚本攻击(Cross Site Scripting,XSS)。
最后,除了这些常见攻击类型外,OAuth 2.0 自身也有可被利用的安全漏洞,比如授权码失窃、重定向 URI 伪造。
所以,我们在实践 OAuth 2.0 的过程中,安全问题一定是重中之重。接下来,我挑选了 5 个典型的安全问题,其中 CSRF、XSS、水平越权这三种是互联网环境下常见的安全风险,授权码失窃和重定向 URI 被篡改属于 OAuth2.0“专属”的安全风险。接下来,我就和你一起看看这些安全风险的由来,以及如何应对吧。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

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_94f887
    codeA绑定了appIdA和userIdA,为啥B能拿着appIdB和codeA,userIdB,userIdB不会验证通过,怎么可以获取到access_token? 另外,老师举例的CSRF例子我看了三遍,都没看明白,有点混乱,不够清晰,建议重写一下,感谢!~

    作者回复: 攻击者A并不是一个第三方开发者,他也是极客时间的一个合法用户,我们这里是有【三方软件A】是想说明这个攻击者“有能力”构建了一个软件页面。 并不存在appidA,appid 一直是极客时间的appid,图中app_id_b也是极客时间的appid,这里用了“b”,只是想区分这两次“请求”。 因为CSRF比较知名,咱们在文中并没有过多对它做基础性解释。在理解这篇文章CSRF攻击的例子时候,可以想象一个成语“移花接木”。

    2020-08-05
    4
    12
  • 袁帅
    对于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-16
    2
    3
  • kylexy_0817
    王老师好,目前的开放平台接入服务,基本都要求在其管理后台配置回调地址吧?这样只要指定回调地址,用回调地址来校验,感觉不需要state参数也能避免CSRF攻击了吧?

    作者回复: 回调地址是一个固定的值,state在每次OAuth事务中是不一样的值,随机生成的值。

    2020-08-01
  • Invincible(・ิϖ・ิ)っ
    对于CSRF攻击有一个疑问:”有一个软件 A,我们让它来扮演攻击者,让它的开发者按照正常的流程使用极客时间。当该攻击者授权后,拿到授权码的值 codeA 之后,“立即按下了暂停键”,不继续往下走了。“ 这里授权码应该是返回到极客时间网站指定的的回调地址上了,攻击者是怎么控制流程不往下走的?

    作者回复: 是一种形象的比喻,实际上是指攻击者截获了授权码这个行为。

    2020-07-19
    5
  • 林光铣
    老师你好,如果要将一批硬件接入OAuth2.0系统,每个硬件作为一个动态客户端注册合适呢,还是硬件配套的后台服务作为一个客户端合适?

    作者回复: 动态注册的初衷解决的是有多个【外部】的API提供商的时候,不用客户端去分别多次到这样的提供商来进行事先注册,不然没对接一个就要注册一次。如果API提供方都是自己公司的其实把硬件设备和后台服务作为一个更合适,通设备号来区别每一个这样的硬件设备。

    2020-07-16
  • tt
    CSRF的本质是身份失窃,被恶意软件或者代码使用。下图中,恶意软件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-12
    8
    13
  • Dolphin
    老师好,关于 CSRF 中 state 的问题,原文中支出: 当极客时间请求授权码的时候附带一个自己生成 state 参数值,同时授权服务也要按照规则将这个随机的 state 值跟授权码 code 一起返回给极客时间。这样,当极客时间接收到授权码的时候,就要在极客时间这一侧做一个 state 参数值的比对校验,如果相同就继续流程,否则直接拒绝后续流程。 我的问题: 在请求授权码的时候 附带了一个 state 的值,然后 state 会和授权码一起被返回,这时候攻击者按下暂停,然后在钓鱼页面中同样携带这个 state 是不是同样不安全? 我理解的是这样?是我哪儿理解错了嘛?
    2021-01-23
    5
    3
  • JianXu
    “在https://time.geekbang.org/page/下,创建了一个页面 hacker.html。” — 老师,黑客是怎么才能在这里新创建一个自己的页面呢?
    2020-10-13
    2
  • 曙光
    “如果这个时候用户 G 被攻击者软件 A 诱导而点击了这个恶意页面,那结果就是,极客时间使用 codeA 值去继续 OAuth 2.0 的流程了。” 第三讲中有说,code会和用户以及appid做关联,如果codeA关联的是用户A,那用户G点击回调函数,也只能获取用户A的access_Token吧。如果传输了G用户的相关信息,授权服务应该拒绝。 所以CSRF攻击有一些前提,如授权服务没有校验codeA是属于哪个用户的code
    2020-09-17
    2
    1
收起评论
显示
设置
留言
22
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部