登录页面是否需要防伪令牌?

Are anti-forgery tokens necessary on a login page?

我经常看到在标准 username/password 登录页面上放置防伪标记的代码示例。即使是 Asp.Net 网络项目模板也能做到。

为什么?唯一改变的系统状态是用户的登录状态,为了实现这一点,攻击者需要他们的用户名和密码,这意味着一切都已经被最大限度地破坏了。

我只是没有在此处看到攻击向量。我错过了什么吗?

扩展 IRCMaxell 的回答。根据定义,CSRF 意味着使用用户的会话 and/or 权限来对付它们。未经身份验证的用户不是 CSRF 的目标。

这是一篇关于该主题的有用 OWASP 文章:https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29

在登录表单中放置防伪令牌几乎完全是为了保持一致性。

编辑:

我最后的陈述是不正确的。这里的另一个答案正确地指出 "Account Fixation" 攻击是可能的。这意味着可以使用不属于自己的凭据将某人登录到站点。这可能会导致个人或财务信息的潜在泄露。

话虽这么说,为所有网络表单包括 CSRF 验证的一般做法是有用且通常是必要的做法。

The only system state that is changed is the user's login status, and in order to even make that happen the attacker would need their username and password which would mean everything is already maximally compromised.

问题是攻击者可以使用攻击者有权访问的其他帐户的用户名和密码,而不是用户自己尝试。

如果没有 CSRF 令牌,攻击者可以强制用户登录到不是他们自己的帐户:帐户固定攻击。根据攻击的开始方式以及应用程序显示当前帐户的显着程度,受害者可能不会注意到,并会假设他们仍然登录到自己的帐户。这可能会导致他们做一些不恰当的事情,例如将敏感信息输入攻击者稍后可以登录帐户查看的区域。

帐户固定攻击可能导致的具体后果是高度特定于应用程序的,对于许多应用程序而言,可能没有实际的攻击可能。但是对于通用登录表单,您无法确定,所以是的,您应该使用 CSRF 令牌。