我最近遇到了一个有趣的登录页面和CSRF令牌问题。我想确保使用CSRF令牌保护登录表单POST,但是,当用户长时间保持在登录页面上时,他/她的会话将过期,并且CRSF令牌将变为无效。有关如何避免此问题的任何建议?我正在考虑不为登录页面使用CRSF令牌,但这似乎是一种不好的做法。
答案 0 :(得分:2)
从技术上讲,登录页面是会话外页面(用户尚未登录),因此实际上并不需要CSRF缓解。如果用户没有建立会话,黑客就无法做很多事情。我想他可以欺骗用户登录 - 如果他知道用户名和密码 - 但如果可以这样做,他可以从他自己的浏览器登录。
如果您坚持登录页面上的CSRF令牌,我建议您按照惯例呈现令牌,并在令牌到期前几秒钟使用Javascript计时器(setTimeout)刷新页面。
答案 1 :(得分:0)
CSRF here上的维基百科页面提到可以使用称为登录CSRF的特殊CSRF类别。我从页面本身引用
攻击者可能会伪造将受害者登录到目标的请求 网站使用攻击者的凭据;这称为登录CSRF。 登录CSRF可以进行各种新颖的攻击;例如,一个 攻击者可以稍后使用其合法凭据登录该站点 并查看已保存的活动历史记录等私人信息 在帐户中。此攻击已在YouTube上得到证实。
在最近的版本中,一个非常流行的Java MVC框架(Spring MVC)使用CSRF令牌添加了内置的CSRF保护,他们也建议使用登录表单进行CSRF保护。我再次引用here
为了防止伪造登录请求登录表单 也应该受到保护,免受CSRF攻击。因为CsrfToken是 存储在HttpSession中,这意味着将创建一个HttpSession 立即。虽然这在RESTful /无状态中听起来很糟糕 架构现实是国家有必要实施 实际安全。如果没有国家,我们无能为力 令牌被泄露。实际上,CSRF令牌是相当的 规模小,应该对我们的架构产生微不足道的影响。
答案 2 :(得分:0)
在考虑CSRF保护方法时,您应该查看Encrypted Token Pattern。它是无状态的,只需要一个令牌,而不是同步器令牌或双提交Cookie模式,它比较两个令牌。
就您在登录页面上的令牌过期问题而言,您可以利用名为ARMOR的框架来防范CSRF。我不担心CSRF方面的登录页面,因为您通常不会在此阶段为用户提供更改状态的选项,这就是CSRF的全部内容。在您的情况下,可能值得考虑在用户登录后注入令牌。
此外,官方OWASP Cheat Sheet是一个很好的参考点。