Json Web Token (JWT) 究竟是如何减少人在循环攻击的?
Posted
技术标签:
【中文标题】Json Web Token (JWT) 究竟是如何减少人在循环攻击的?【英文标题】:How exactly does Json Web Token (JWT) reduce the man-in-the loop attack? 【发布时间】:2016-10-27 08:56:40 【问题描述】:我正在尝试了解 JWT,并在网上浏览各种资源。我找到了显示如何检查 JWT 是否经过调和的代码——这是一个很棒的代码,我理解它。
但是,我不明白 JWT 不会被中间人使用,他们可以查看浏览器数据(想想图书馆中的公共计算机)或嗅探电线(我想这可以避免通过 HTTPS)获取 GWT 字符串,并从另一台计算机重播。
https://float-middle.com/json-web-tokens-jwt-vs-sessions/
[headerB64, payloadB64, signatureB64] = jwt.split('.');
if (atob(signatureB64) === signatureCreatingFunction(headerB64 + '.' + payloadB64)
// good
else
// no good
【问题讨论】:
是的,使用不记名令牌时需要 HTTPS 来防止中间人攻击。 所以只是为了增强我的知识,如果令牌可以被嗅探并用于重放,如果我们要发送用户 ID 和密码,它们会增加什么价值?他们应该有一些价值,因为它正在行业中使用,那么如果是这样的话,价值是什么? 【参考方案1】:确实,他们可以。您可以采取措施防止这种情况发生,例如,将请求者的 IP 地址封装在加密数据中,并为令牌提供相对较短的生存时间.但是,关键思想是接收系统只有令牌及其加密的内容,以采取行动。服务器可以验证令牌是否有效并且知道它没有被更改,但是,由于没有“会话”,它无法检测到重放攻击,除非令牌使其能够这样做。 (因此,这样做!)
【讨论】:
谁应该进行 IP 地址嵌入?似乎 GWT 令牌提供者(Facebook、Google 等)应该通过在声明字段中嵌入客户端 IP 来这样做。但是,GWT 令牌提供者(例如,FB/Google)目前还没有这样做,对吧?资源提供者(API 服务所有者)能否指示 Google/Facebook 发出令牌中应包含的声明? 您通常无法控制令牌中的声明。 我认为,务实地说,如果你想防止令牌被从空中刷出,你将不得不使用 SSL 或其他形式的加密来保护链接。无论如何,您可能应该这样做。这个策略的关键概念非常类似于占有。 “你拥有它,或者你没有”,任何“拥有它”的人都会被认可。这就是设计的完成方式。 SSL 流量仍然可以被嗅探并且令牌可以被窃取。 JWT 中没有真正的解决方案。过期无济于事,因为被攻击者可能会窃取新令牌。我看过来自 auth0 或 oauth.io 的关于使用 AI 来确定 API 中异常令牌使用的帖子。重放和中间人最有前途的解决方案是一个称为“令牌绑定”的概念,它已经用于需要额外安全性的行业——比如银行。它将令牌绑定到浏览器上的公钥/私钥。 PingIdentity 是一个提供者。 en.wikipedia.org/wiki/Token_Binding以上是关于Json Web Token (JWT) 究竟是如何减少人在循环攻击的?的主要内容,如果未能解决你的问题,请参考以下文章