针对 OAuth2.0 的 CSRF 攻击,第1张

这篇文章的主要内容来源于另外一个作者,文章地址: 移花接木:针对OAuth2的CSRF攻击

不过针对 OAuth20 的 CSRF 攻击我有两个疑问点,先列出来:

1如果授权码(Authorization code)和 client_id、redirect_uri 是绑定的,即便攻击者把 Tonr 网站触发申请令牌的 HTTP 请求中的授权码替换了,Sparklr 认证服务器校验 code 的合法性时发现其对应的 client_id 等不一致,那么这个code会被认定为不合法的,攻击就会失败

2有人会说获取授权码(Authorization code)的 HTTP 请求是 GET 方式,截获 client_id、redirect_uri 很容易,然后在 Tonr 网站申请令牌的 HTTP 请求中 client_id、redirect_uri 把也都替换掉,那这样的话,获取的 token 就不再是属于张三的了,攻击也会失败

下面是原文章内容

为了提升用户的帐号登录、注册体验,往往会在我们的 Web 网站、App 中提供如 QQ、WeChat、Sina等第三方社交帐号登录或者绑定的功能,通过上一篇文章 理解OAuth20 我们知道这背后使用到的关键技术是 OAuth20 认证,想要在自己的 Web 站点、App 中集成第三方帐号登录不是难事,第三方服务提供者都有详细的文档指南

这篇文章我们聚焦关注下 OAuth 安全方面的坑,被人经常谈起的一个 OAuth 安全问题就是开发者不规范化使用 state 而引起的 CSRF 攻击

我们看一个针对 OAuth20 的 CSRF 攻击的例子。假设有用户张三、攻击者李四,第三方应用 Tonr(该应用集成了第三方社交账号登录,并且允许用户将社交帐号和 Tonr 中的帐号进行绑定),以及 OAuth20 服务提供者 Sparklr

1 攻击者李四登录 Tonr 网站,使用 Sparklr 帐号授权登录 Tonr 网站,并且将 Sparklr 帐号与 Tonr 网站的帐号进行绑定

2 李四选择使用 Sparklr 帐号授权登录 Tonr 网站,根据 OAuth20 授权登录流程,此时 Tonr 网站会将李四的请求导向 Sparklr 的认证服务器,询问是否同意授权 Tonr 网站

3 李四在点击 同意授权 之后,截获 Sparklr 认证服务器返回的 code 参数

4 李四精心构造一个 Web 页面,它会触发 Tonr 网站向 Sparklr 发起申请令牌的请求,而这个请求中的 code 就是上一步截获的 code

5 李四将这个 Web 页面放到互联网上,等待或诱骗受害者张三来访问

6 张三之前登录过 Tonr 网站,只是没有把自己的帐号与其他社交帐号绑定起来。在张三访问李四准备的这个 Web 页面的时候,触发了令牌申请流程,Tonr 网站从 Sparklr 那里获取到 Access token ,但是这个 token 以及通过它进一步获取到的用户信息都是攻击者李四的

7 Tonr 网站将李四的 Sparklr 帐号同张三的 Tonr 帐号关联绑定起来,从此以后,李四就可以用自己的 Sparklr 帐号通过 OAuth 授权登录到张三在 Tonr 网站中的帐号,堂而皇之的冒充张三的身份执行各种操作

我们从不同的角度看看这其中发生了什么

受害者张三访问了一个 Web 页面,然后就没有然后了,他在 Tonr 网站上的帐号就和攻击者李四在 Sparklr 上的帐号绑定在一起了。他根本不知道发生了什么

从 Tonr 网站来看,它收到的请求都是正常的,首先它收到了一个 HTTP 请求,代表着当前用户张三在 Sparklr 认证服务器上已经做了 同意授权 操作,其内容如下:

当 Tonr 网站收到这样的请求时,它以为用户张三已经同意授权,于是就发起后续的令牌申请请求,(注意此时申请令牌的请求中的 code 已经被替换成攻击者李四的 code ),用收到的 Authorization code 向 Sparklr 网站换取 Access token ,只不过最后拿到的是攻击者李四的 Access token

最后,通过 Access Token 换取到用户张三在 Tonr 网站的帐号信息并与攻击者李四在 Sparklr 网站的帐号进行绑定

对于 Sparklr 网站来说,只要收到的参数是正确的有效的,那就提供正常的认证服务,仅此而已

在用户张三同意 Sparklr 授权 Tonr 网站的授权请求后,攻击者将 Sparklr 网站返回的授权码(Authorization code) 替换成自己提前获取到的 code 。这样,当受害者访问到攻击者精心准备的 Web 页面并向 Sparklr 发起申请 Access Token 令牌的 HTTP 请求,实际上是在用张三在 Tonr 网站上的帐号和李四在 Sparklr 网站上的帐号进行绑定

攻击完成之后,李四在 Tonr 网站上可以使用自己在 Sparklr 网站上的帐号进行登录,而且登录进去的是张三在 Tonr 网站上的帐号,同理张三通过自己在 Tonr 网站上的帐号登录进去之后,看到的是李四在

Sparklr 网站上的数据

从整体上来看,这次攻击的时序图应该是下面这个样子:

要想完成 CSRF 攻击也是不容易进行的

首选,用户张三必须在 Tonr 网站已经拥有了一个个人帐号

其次,整个攻击必须要在短时间内完成,因为第三方服务提供商的认证服务器颁发的授权码(Authorization code) 有效期很短,OAuth20 官方建议控制在 10分钟 ,一旦 Authorization code 过期后那么后续的攻击也就不能进行下去了

最后,一个 Authorization code 只能被使用一次,如果第三方服务提供商收到重复的 Authorization code ,它会拒绝当前令牌的申请请求。不仅如此,根据 OAuth20 官方推荐,它还可以把和这个已经使用过的 Authorization code 相关联的 Access Token 全部撤销掉,进一步降低安全风险

要防止这样的攻击也不难,作为第三方应用的开发者,只需要在 OAuth 认证过程中加入 state 参数,并验证它的参数值即可,具体细节如下:

state 参数在 OAuth2 认证过程中不是必选参数,因此第三方应用开发者在集成 OAuth2 认证的时候,容易忽略该参数的存在,导致容易受到 CSRF 攻击。并且,这种攻击比较巧妙,可以悄无声息的攻陷受害者的帐号,难以被察觉

所以,作为第三方应用开发者,我们只需要在 OAuth20 认证过程中明确提供 state 参数并验证其参数值,即可防御这样的攻击

当用户携带token 请求资源服务器的资源时, OAuth2AuthenticationProcessingFilter 拦截token,进行token 和userdetails 过程,把无状态的token 转化成用户信息。

最重要的 userTokenConverterextractAuthentication(map);

基于Spring Cloud、oAuth20开发基于Vue前后分离的开发平台,支持账号、短信、SSO等多种登录,提供配套视频开发教程。

https://giteecom/log4j/pig

1 由于 spring cloud gateway 是基于 WebFlux 框架实现的,该网关作为资源服务器时不能使用 @EnableResourceServer 注解,需要使用 @EnableWebFluxSecurity 注解来配置安全过滤链。

2 在 springboot 22 之前的版本中,安全框架对应的是 spring-security 514,该版本只实现了基于 id token (jwk) 的认证,而我当前项目中的认证服务组件是基于 orgspringframeworkcloud:spring-cloud-starter-oauth2 框架开发,使用的是秘钥签名的 access token,所以网关服务组件需要使用 springboot 22 + spring security 52 来处理 jws。

3 现有项目使用了 gradle 构建,是一个多模块的结构,其中主模块引入了 212RELEASE 版本的 orgspringframeworkboot 插件,用来确保各模块中 spring 组件的版本统一,此时子模块是无法通过修改插件版本号或重新引入插件来改变模块中 springboot 的版本,所以网关模块想用要引入 springboot 22 的话,就得脱离主模块,或者将插件引入的操作直接下放到各个子模块的构建过程中。

4 orgspringframeworkcloud:spring-cloud-starter-oauth2 中 orgspringframeworksecurityjwtcryptosignMacSigner 支持使用短密码的 HMACSHA256 签名算法,NimbusReactiveJwtDecoder 不支持短密码。

在第三方应用程序获取系统资源时,不在该平台输入用户名、密码便可登录。如在平台利用微信登录时并没有输入用户名、密码,会跳到微信平台输入微信密码,微信认证后,将用户信息提供给该平台,该平台利用此信息将用户在平台注册,如此用户虽然在微信端登录却能在平台保存信息,其中就用到了oauth2思想。

1授权码:这是最安全的方式也是最推荐,完整的oauth2框架,真正oauth2框架要解决的问题的方案,其他方式都不是安全的

2密码模式:不建议使用,如此会将用户用户名密码信息暴露在第三方平台上可能导致用户信息泄露,除非该平台是系统信任的平台。

3简化模式:用户在浏览器向认证服务器申请令牌,跳过了“获取授权码”的步骤,不需要用户登录,返回的token可见,用户将此token给客户端,客户端携带去请求

4用户在客户端注册,客户端以自己名义而不是用户名义向认证服务器申请访问令牌

PUBG总显示检测外挂程序怎么办

误封,若是误封,或者问题不大,一般几天就自动解封了。外挂,有用外挂。要么是绝地求生自己更新了反外挂机制,加大封挂力度在。要么就是有东西碍事了,导致他出现了大量的误封。

开挂导致系统出错,要解决这个问题就需要玩家卸载外挂,并重新下载游戏试试看,还是不行的话,就要考虑重装系统了。

右键“此电脑”(或者我的电脑),然后单击“管理”,双击图中所示的“服务和应用程序”。在服务列表里找到“BattleEyeService”,右键,然后点击“属性”。

这种情况多数并不是你自己开挂,而是被盗号后开挂,在网吧再常见不过了,网吧盗号的情况相当严重。

如果玩家确定没有使用外挂,并且在游戏中没有违规行为,而被官方误封,可以尝试以下方法:检查电脑上是否安装病毒防护程序,这些程序经常造成游戏崩溃或者是被检测为外挂程序。

如果你的windows系统激活可能是用激活软件激活的,相当于你作弊激活windows,所以游戏的BE服务检测到你系统是作弊激活,就不让你继续游戏了,只能重装系统买秘钥激活,我是重装完没激活状态下试了一下,可以正常游戏。

oauth2实现单点登录哪家好?

其次,OAuth2是用来允许用户授权第三方应用访问他在另一个服务器上的资源的一种协议,它不是用来做单点登录的,但我们可以利用它来实现单点登录。

单点登录和统一认证中主要的三个协议是 OpenID , OAuth , 金和 SAML ,被称为单点登录的三驾马车。这些协议已经有了各种语言版本的实现,本人也在其他文字做了详尽的介绍,这里专门对比下三种协议的异同。

用CAS实现的单点登录流程如下:理解OAuth2本身,见 http:// 这里重点提出的是使用Oauth2的单点登录流程:OpenID最新版本是OpenID Connect,它为OpenID的第三代技术。

本案涉及三个概念及功能模块,即门户、单点登录和统一身份认证。

绝地求生应用程序被外部软件中断怎么办

前三个提示是搜狗输入法,在进入游戏时把输入法切换到中文--美式键盘状态,如果还有sogouinput的提示,直接卸载搜狗输入法。

第一种:报错提示DLL文件丢失,尝试重新安装程序解决。

你好,大意为:申请被外部程序中断。第一个原因,隐藏程序或者恶意软件 第二个原因,gpu被过分限制或者超过运行用量。尝试不使用管理员权限运行程序。第三个原因,内存记忆不足,尝试重启。全为手打,望珍惜他人劳动成果。

绝地求生从外部提供商处验证失败是怎么回事

1、如果游戏提示您从外部提供商处验证失败了,说明是外部合作的服务器站点运行空间不足,玩家俗称服务器炸了。其实就是服务器出现了问题。

2、目前官方已经发出公告,是因为运行商网络波动,一些用户无法正常登录,官方已经在修复中了。想要尽快解决鉴权未成功的问题,我们自己首先可以把游戏完全卸载然后安装登录尝试一下,如果还是不行就等修复。

3、吃鸡平台显示认证失败的原因有两个,一个是个人的实名信息有误,识别不了没办法认证;另一个是当前网络不好,导致登录信息无法认证的意思。《绝地求生》(PUBG)是由韩国Krafton工作室开发的一款战术竞技型射击类沙盒游戏。

4、绝地求生平台认证失败是怎么回事?其实这个很简单,玩过游戏的都会遇到这个问题。解决的方法也很简单。这个和服务器满载几乎差不多,第一个原因可能是没有更新游戏直接进入的,需要去steam更新下游戏。

5、绝地求生不能正常启动,建议先关闭杀毒软件,卸载迅雷启动试试,还不行用下面方法排除。

无法正常运行提示未能从外部提供程序进行身份验证,求解答

刷新等待 玩家可以不停的刷新界面,这样做的目的是不停刷新服务器的更新。如果服务器维护了,应该是由更新文件提供给玩家的。切换战区 玩家可以选择不同的服玩,比如您之前常常玩的是亚服。

如果游戏提示从外部提供商处验证失败了,说明是外部合作的服务器站点运行空间不足,玩家俗称服务器炸了,其实就是服务器出现了问题。

在手机WIAN里可以看到无线连接不上路由器,提示身份验证出现问题。将路由器断电,大约5-10秒,重新接通电源。轻触手机上的连接名,然后点击不保存按钮。然后再次轻触连接名,重新输入无线密码,选择连接按钮。

第一步:首先从iPhone桌面进入「照片」。第二步:打开照片后,点击切换到底部的「共享」,然后将里面的这些推送垃圾广告全部点击“拒绝”屏蔽掉。第三步:再从iPhone7桌面进入「设置」,然后再进入「iCloud」设置。

重新启动计算机:有时候一些程序因为系统出现问题而无法启动。重启后有助于解决这些问题。 卸载并重新安装程序:如果该程序已损坏,重装可能是解决问题的最佳方法。

一般而言,Windows7操作系统遇到网络异常,第一时间调用疑难解答向导,及时检测问题,如能自动修复最好,否则向导也会给出提示,按照这个提示 诊断策略服务未运行 进行修复系统。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 针对 OAuth2.0 的 CSRF 攻击

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情