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

时间:2011-06-20 14:30:12

标签: php token csrf

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

例如,如果某个网站的表单会将添加的项目输入到您的购物车中,并且攻击者可能会使用您不想要的项目向您的购物车发送垃圾邮件。

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

我理解令牌如何工作并在这种情况下增加安全性,因为它们确保用户实际填写并按下表格中的“提交”按钮以添加到购物车中。

但是,令牌是否会为用户登录表单添加任何安全性,这需要用户名和密码?

由于用户名和密码非常独特,攻击者必须知道这两种情况才能使登录伪造工作(即使您没有设置令牌),如果攻击者已经知道,他只能签名自己上网。更不用说,使用户登录的CSRF攻击无论如何也没有任何实际意义。

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

5 个答案:

答案 0 :(得分:107)

是。通常,您需要像其他任何人一样保护您的登录表单免受CSRF攻击。

否则,您的网站很容易受到某种“受信任的域名网上诱骗”攻击。简而言之,CSRF易受攻击的登录页面使攻击者能够与受害者共享用户帐户。

漏洞就像这样:

  1. 攻击者在受信任域上创建主机帐户
  2. 攻击者使用此主机帐户的凭据在受害者的浏览器中伪造登录请求
  3. 攻击者欺骗受害者使用受信任的站点,他们可能不会注意到他们是通过主机帐户登录的。
  4. 攻击者现在可以访问受害者在其浏览器使用主机帐户登录时“有意或无意”创建的任何数据或元数据
  5. 作为一个相关的例子,考虑YouTube。 YouTube允许用户查看“他们自己的”观看记录的记录,他们的登录表单是CSRF易受攻击的!因此,攻击者可以使用他们知道的密码设置帐户,使用 帐户将受害者登录到YouTube - 跟踪受害者正在观看的视频。< / p>

    this comment thread中进行了一些讨论,暗示它可以“仅”用于此类隐私侵权行为。或许,但引用Wikipedia's CSRF article中的部分:

      

    登录CSRF可以进行各种新颖的攻击;例如,一个   攻击者可以稍后使用其合法凭据登录该站点   并查看已保存的活动历史记录等私人信息   在帐户中。

    强调“小说攻击”。想象一下网络钓鱼攻击对用户造成的影响,然后想象一下网络钓鱼攻击是通过用户自己的可信书签进入您的网站的!在前面提到的评论主题中链接的论文给出了一些超越简单隐私攻击的例子。

答案 1 :(得分:13)

您的理解是正确的 - CSRF的重点是攻击者可以事先伪造一个看似合法的请求。但是这不能通过登录表单来完成,除非攻击者知道受害者的用户名和密码,在这种情况下有更有效的攻击方式(登录自己)。

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

答案 2 :(得分:0)

CSRF验证预登录对IMHO没有太大意义。

感谢@squiddle提供链接:seclab.stanford.edu/websec/csrf/csrf.pdf,我们可以在第一页上阅读:

The most popular CSRF defense is to include a secret
token with each request and to validate that the received
token is correctly bound to the user’s session,
preventing CSRF by forcing the attacker to guess the
session’s token.

如果您尝试CSRF验证预登录,那么您就给潜在的攻击者提供了抓取您网站的有效代码的机会!然后,他/她将能够重新发布令牌,从而达到目的。

然后,攻击者可能会尝试猜测您网站的用户名。我所做的是,如果IP地址试图猜测说10个用户名而没有成功,我只会将其列入黑名单。

答案 3 :(得分:0)

,因此其他网站无法模仿您的登录表单!就这么简单。

他们可以通过这样做实现什么?

  • 首先:您不想这么做。
  • 第二:即使是非常简单的失败案例,例如:
    • 由于密码n错误而阻止了用户。时间可以避免。
    • 可以防止轻率黑客入侵警报。等等

答案 4 :(得分:0)

OWASP在CSRF文档中使用dedicated section来处理登录CSRF,以及为何/如何防止这种情况。

要点:


login-CSRF如何危险:

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

解决方法:

可以通过创建预会话(会话之前的会话)来缓解CSRF登录 用户通过身份验证),并在登录表单中包含令牌。

最后:

请记住,会话前不能转换为真实会话 一旦用户通过身份验证-会话应被销毁,并且 应该制造一个新的

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