未经身份验证的请求、操作、搜索或评论的 CSRF 保护?

信息安全 csrf
2021-09-03 19:37:36

我已经浏览了从用户登录的银行进行 CSRF 资金转账的示例。同样,我在电子邮件更新的情况下查看了 CSRF。我想我理解了,但我不太确定它是否也适用于未经身份验证的请求/表单提交。我现在正试图弄清楚 CSRF 的影响,特别是参考下面给出的上下文。

假设一个购物网站,经过身份验证和未经身份验证的用户都可以浏览和购物。想象一个场景,未经身份验证的用户浏览器并将商品添加到他的购物车(仍然未经身份验证)。他后来决定结帐并被重定向到结帐页面而不登录(访问从未经身份验证的用户或类似的东西升级到访客用户)。用户现在输入他的个人信息(通过 SSL),如电子邮件、地址、电话、信用卡信息等。他的购物完成,他关闭了应用程序。他可以使用发送到他的电子邮件或订单号的链接来跟踪/更新订单。

  1. 由于用户是/可能永远不会在此应用程序中进行身份验证,所有表单/请求是否仍需要针对 CSRF 进行保护?如果不是,在什么情况下需要实施 CSRF 保护?

  2. 此外,对于登录用户和未经身份验证的用户,是否应该保护搜索免受 CSRF 的影响?如果你能同时回答这两个问题,那就太好了。访问者的评论(未登录)怎么样?

  3. 即使在将令牌用于 CSRF 保护之后,是否也需要进行推荐人检查?我不这么认为,仍然确定。(与上述情况无关)。

  4. 登录 CSRF 对于电子商务网站有多重要?

如果我在这里遗漏了什么,请告诉我,我仍在努力全面了解 CSRF、它在各种情况下的影响和相关风险。

PS 一些扫描器在每次提交表单时都会抛出 CSRF,而没有随机令牌或引用者检查。

2个回答

1.由于用户是/可能永远不会在此应用程序中进行身份验证,所有表单/请求是否仍需要针对 CSRF 进行保护?如果不是,在什么情况下需要实施 CSRF 保护?

如果用户与应用程序有某种机密会话状态,则建议使用 CSRF。

您可能希望防止 CSRF 将产品添加到购物篮。但是,如果您不这样做,那么您可能会发现这是一种可接受的风险,而不是向用户显示他们的购物篮内容并要求他们在他们继续结帐之前确认。通过这种方式,他们会在付款之前知道他们的购物篮中是否有任何更改。当然,确认表单本身应该具有 CSRF 保护,它应该从显示的表单中获取其余的结帐状态,而不是会话,因为在向用户显示页面时它仍然容易受到攻击。

2.此外,对于登录用户和未经身份验证的用户,搜索是否应该受到 CSRF 保护?如果你能同时回答这两个问题,那就太好了。访问者的评论(未登录)怎么样?

您只需要保护“不安全”的请求。也就是说,在您的应用程序上更改状态的操作。有关安全请求的详细信息,请参阅RFC 7231 。不安全的请求通常通过 POST 方法实现,因此您应该专注于保护所有 POST 请求而不是 GET 请求。这是假设所有不安全的请求都是 POST(如果正确实施,它们应该是)。

3. Tokens 用于 CSRF 保护后,是否还需要进行 referer 检查?我不这么认为,仍然确定。(与上述情况无关)。

不,基于令牌的 CSRF 保护取代了较弱的引用保护形式。

登录 CSRF 对于电子商务网站有多重要?

通过“登录 CSRF”,我假设您的意思是经过身份验证的 CSRF,而不是保护登录表单本身?如果是后者那么请看这里

很重要。您不想让您的网站容易受到提交或更改订单、个人详细信息或密码的攻击者的攻击(尤其是当他们允许访问卡详细信息时)。即使没有身份验证,您仍然需要在当前用户下订单时保护他们的会话。

虽然@SilverlightFox 对问题二的回答是正确的,但 CSRF 令牌所保护的不仅仅是状态变化。跨域定时攻击可以很好地揭示搜索索引中的敏感信息(有关更多信息,请参见https://www.idontplaydarts.com/2015/09/cross-domain-timing-attacks-against-lucene/)。

这就是为什么使用 CSRF 令牌保护甚至搜索至关重要的原因。