【发布时间】:2018-04-17 11:12:15
【问题描述】:
我已经阅读了很多 long explanations of CSRF 和 IIUC,导致攻击的核心是基于 cookie 的服务器会话识别。
换句话说,如果浏览器(请注意,我在这里专门将范围缩小到 Web 浏览器)不使用基于 cookie 的会话密钥来识别服务器上的会话,那么 CSRF 攻击就不会发生。我理解正确吗?
例如,假设有人创建了如下链接:
href="http://notsosecurebank.com/transfer.do?acct=AttackerA&amount;=$100">Read more!
您在登录http://notsosecurebank.com 时被骗点击此链接,但是http://notsosecurebank.com 不使用 cookie 来跟踪您的登录会话,因此该链接不会造成任何伤害,因为该请求无法通过身份验证而只是获取扔进垃圾箱?
假设
- OpenID 连接服务器/OAuth 授权服务器已正确实施,不会将身份验证重定向发送到您请求的任何 URL。
- 攻击者不知道客户端 ID 和客户端密码
脚注
我在这个问题中针对的场景是最常谈论的 CSRF 场景。还有其他适合CSRF 标签的场景。这些情况极不可能发生,但需要注意并做好准备。 One of them 具有以下组件:
- 1) 攻击者能够将您引导至不良客户端
- 2) 攻击者拥有该客户端
- 3) 攻击者拥有向 OAuth 授权服务器注册的客户端的机密
- 4) 在您通过正确的服务器进行身份验证后,攻击者能够告诉对您进行身份验证的授权服务器重定向回不良客户端。
所以设置它有点像闯入诺克斯堡,但一定要注意。例如,OpenID Connect 或 OAuth 授权提供者应该最有可能标记注册重定向 URL 的客户端,指向其他客户端也注册的重定向 URL。
【问题讨论】:
-
如果你不使用cookies你用什么?
-
JWT 和 XHR / REST 请求。 Authorization 标头将包含 JWT 令牌。它由创建请求的 javascript 代码放在 XHR 请求上。
-
你如何通过 JWT?每次你都会在客户端创建一个令牌或重复使用它?
-
您最初从 OpenID Connect 提供者/OAuth 授权服务器获取 JWT,并将其存储在本地或会话存储中。当您创建 api 请求时,令牌会从本地存储中读取并包含在 Authorization 标头中。
-
@Ole 那么你不能使用 HttpOnly 并让自己面临更大的 XSS 攻击类别。正确构建您的应用程序(通过要求对不安全操作使用正确的方法)更好。
标签: security cookies jwt csrf openid-connect