登录表单是否需要针对CSRF攻击的令牌


Do login forms need tokens against CSRF attacks?

根据我到目前为止所学到的,令牌的目的是防止攻击者伪造表单提交。

例如,如果一个网站有一个表单,将添加的项目输入到你的购物车中,攻击者可以用你不想要的项目向你的购物篮发送垃圾邮件。

这是有道理的,因为购物车表单可能有多个有效输入,攻击者所要做的就是知道网站正在销售的商品。

我理解代币在这种情况下是如何工作和增加安全性的,因为它们确保用户已经为添加到购物车中的每个项目实际填写并按下了表单的"提交"按钮。

然而,令牌是否为需要用户名和密码的用户登录表单添加了任何安全性?

由于用户名和密码是非常唯一的,攻击者必须知道这两个信息才能进行登录伪造(即使你没有设置令牌),如果攻击者已经知道这一点,他可以自己登录网站。更不用说,让用户自己登录的CSRF攻击无论如何都没有任何实际目的。

我对CSRF攻击和令牌的理解正确吗?我怀疑它们对用户登录表单没用吗?

是。一般来说,您需要保护您的登录表单免受CSRF攻击,就像其他任何攻击一样。

否则,您的网站很容易受到某种"可信域网络钓鱼"攻击。简而言之,CSRF易受攻击的登录页面使攻击者能够与受害者共享用户帐户。

漏洞显示如下:

  1. 攻击者在受信任域上创建主机帐户
  2. 攻击者使用此主机帐户的凭据在受害者的浏览器中伪造登录请求
  3. 攻击者诱骗受害者使用受信任的站点,在那里他们可能不会注意到自己是通过主机帐户登录的
  4. 攻击者现在可以访问受害者在使用主机帐户登录浏览器时(有意或无意)"创建"的任何数据或元数据

举个相关的例子,想想YouTube。YouTube允许用户查看"自己"的观看历史记录,并且他们的登录表单易受CSRF攻击!因此,攻击者可以使用他们知道的密码建立一个帐户,使用该帐户将受害者登录到YouTube,跟踪受害者正在观看的视频。

这条评论中有一些讨论暗示,它"只能"被用于此类侵犯隐私的行为。也许吧,但引用维基百科CSRF文章中的一节:

登录CSRF使各种新颖的攻击成为可能;例如攻击者稍后可以使用其合法凭据登录到该网站并查看已保存的私人信息,如活动历史记录账户中。

强调"新颖的攻击"。想象一下网络钓鱼攻击对您的用户的影响,然后想象一下所述网络钓鱼攻击通过用户自己的可信书签作用于您的网站!上述评论中链接的论文给出了几个超越简单隐私攻击的例子。

OWASP在其CSRF文档中有一个专门的部分,说明登录CSRF以及防止登录的原因/方法

基本上,在登录CSRF时,用户试图以自己的身份登录网站,但他们实际上是以攻击者的身份登录的。然后,攻击者可以访问用户认为可能在其帐户中私下输入/更改的任何数据

文章要点:


登录CSRF有多危险:

如果攻击者在购物时使用CSRF对受害者进行身份验证使用攻击者的帐户访问网站,然后受害者输入他们的信用卡信息,攻击者可能能够购买物品使用受害者存储的卡详细信息

如何解决:

登录CSRF可以通过创建预会话(之前的会话用户被认证)并且包括登录形式的令牌。

最后:

请记住,预会话不能转换为实际会话一旦用户通过身份验证,会话就应该被销毁新的应该做

请注意,这种缓解方法还可以防止会话固定漏洞,因为登录后重新生成会话是这种方法的一部分。

您的理解是正确的——CSRF的全部意义在于攻击者可以预先伪造一个看起来合法的请求。但是,除非攻击者知道受害者的用户名和密码,否则登录表单无法完成这一操作,在这种情况下,有更有效的攻击方法(自己登录)。

最终,当安全系统可能会将用户锁定一段时间时,攻击者唯一能做的就是通过垃圾邮件发送失败的登录信息给用户带来不便。