在 HTTP 连接中使用基于令牌的身份验证时如何防止重放攻击

Posted

技术标签:

【中文标题】在 HTTP 连接中使用基于令牌的身份验证时如何防止重放攻击【英文标题】:How to prevent replay attacks when using token based authentification in an HTTP connection 【发布时间】:2017-09-05 18:32:16 【问题描述】:

在使用基于令牌的身份验证(例如:JSON Web 身份验证)时,如何防止重放攻击并向我的应用程序添加另一层加密?

【问题讨论】:

【参考方案1】:

如果您想保护您的应用程序身份验证免受重放攻击,您可以包含随机数 (jti)、到期时间 (exp) 和发布时间 (iat)。

有关详细信息,请参阅spec。

更多细节。

重放攻击(也称为回放攻击)是一种网络形式 恶意或恶意有效数据传输的攻击 欺诈性地重复或延迟。 [wikipedia]

因此,如果您使用随机数,则数据只能传输一次,因此无法重新传输。这可以防止经典的重放攻击。

为了避免延迟攻击,使用了过期时间和发布时间。这种攻击不仅包括捕获数据流量,还包括中断受害者的流量。中断交通需要时间。当然,使用到期时间和发布时间并不是 100% 的解决方案,但如果您明智地选择这些值,则可以将风险降至最低。

【讨论】:

我不明白这如何防止重放攻击,因为攻击者可以在到期时间到达之前拦截数据包并发送到服务器,声称他是合法用户。尽管如此,我什至看不到 https 是如何阻止这种事情的,即使请求被加密,攻击者也可以随时拦截请求并发送它以从服务器获得正确的响应! @salutent 请查看我的更新答案我添加了一些细节。 我知道了。如果攻击者中断流量并将数据包发送到声称他是合法发件人的服务器,如果我的到期时间设置为 3-4 分钟,这应该不是一个真正的问题? @salutent,您选择的时间取决于您的基础架构和网络等因素。例如,如果您在本地网络中操作,则到期时间可能比在移动网络中操作要短得多。在我看来,您应该根据自己的环境凭经验确定到期时间。【参考方案2】:

您可以使用 https。你应该使用 https。

【讨论】:

以上是关于在 HTTP 连接中使用基于令牌的身份验证时如何防止重放攻击的主要内容,如果未能解决你的问题,请参考以下文章

如何使用基于令牌的身份验证对在浏览器中输入 url 的用户进行身份验证?

基于令牌的身份验证中的会话

如何基于使用 Oauth2 协议的身份验证改进 JWT 访问令牌和刷新令牌?

如何使用 MVC 5 在基于令牌的身份验证中检查用户是不是从控制器登录?

下载文件时如何传递身份验证令牌?

如何从 RESTful 服务发送安全令牌?