0

我最近在登录页面和 CSRF 令牌方面遇到了一个有趣的问题。我想确保登录表单 POST 使用 CSRF 令牌进行保护,但是,当/如果用户长时间留在登录页面上时,他/她的会话将过期并且 CRSF 令牌将变为无效。关于如何避免这个问题的任何建议?我正在考虑不为登录页面使用 CRSF 令牌,但这似乎是一种不好的做法。

4

3 回答 3

2

从技术上讲,登录页面是一个会话外页面(用户尚未登录),因此实际上不需要 CSRF 缓解。如果用户还没有建立会话,黑客就无能为力了。我猜他可以欺骗用户登录——如果他知道用户名和密码——但如果可以的话,他可以从他自己的浏览器登录。

如果您坚持在登录页面上使用 CSRF 令牌,我建议您照常渲染令牌,并在令牌到期前几秒钟使用 Javascript 计时器 (setTimeout) 刷新页面。

于 2013-10-04T01:37:00.447 回答
1

CSRF 上的 Wikipedia 页面在这里提到了一种称为登录 CSRF 的特殊类别的 CSRF 是可能的。我引用页面本身

攻击者可能会使用攻击者的凭据伪造请求将受害者登录到目标网站;这称为登录 CSRF。登录 CSRF 使各种新颖的攻击成为可能;例如,攻击者稍后可以使用其合法凭据登录该站点,并查看已保存在帐户中的活动历史记录等私人信息。该攻击已被证明是针对 YouTube 的。

此外,一个非常流行的 Java MVC 框架(Spring MVC)在其最近的版本中添加了使用 CSRF 令牌的内置 CSRF 保护,他们也建议使用登录表单来保护 CSRF。我再次从这里引用

为了防止伪造登录请求,登录表单也应该受到保护以免受 CSRF 攻击。由于 CsrfToken 存储在 HttpSession 中,这意味着将立即创建一个 HttpSession。虽然这在 RESTful / 无状态架构中听起来很糟糕,但现实是状态是实现实际安全所必需的。如果没有状态,如果令牌被泄露,我们将无能为力。实际上,CSRF 令牌的大小非常小,对我们的架构的影响应该可以忽略不计。

于 2013-10-17T19:50:53.253 回答
0

在考虑 CSRF 保护方法时,您应该查看加密令牌模式。它在设计上是无状态的,并且只需要一个令牌,而不是同步器令牌或双重提交 Cookie 模式,它们比较两个令牌。

对于登录页面上令牌过期的问题,您可以利用一个名为ARMOR的框架来防止 CSRF。我不会担心 CSRF 方面的登录页面,因为您通常不会在此阶段为用户提供更改状态的选项,这就是 CSRF 的全部意义所在。在您的情况下,可能值得考虑在用户登录后注入令牌。

此外,官方的OWASP 备忘单是一个很好的参考点。

于 2013-10-22T09:56:58.123 回答