匿名评论/帖子表单是否需要csrf令牌?如果不是为什么SO使用它以及如何实现它?

时间:2015-06-10 21:48:07

标签: security csrf csrf-protection

有人在SO上讨论like this声称匿名表单不需要csrf保护。查看stackoverflow html代码,未登录时,可以看到csrf令牌 在作为匿名用户发帖时设置为答案框。

  1. 这个csrf令牌如何帮助保护匿名用户?
  2. csrf令牌应与用户会话ID相关联。什么是匿名用户的等价物? IP地址?

2 个答案:

答案 0 :(得分:2)

  

这个csrf令牌如何帮助保护匿名用户?

经验法则是,任何state changing operation都需要受到保护,不受CSRF攻击。因此,如果您的表单是状态更改操作,则应该受到保护。例如,this answer描述了您需要在登录表单上使用CSRF保护的原因(请记住,用户在登录时是匿名的)。我见过您也想要保护的匿名投票表格。在轮询表单的情况下,CSRF令牌保护站点的完整性(匿名轮询站点具有的完整性)。

另一方面,某些表单不需要CSRF保护。显然,在JavaScript中处理并且永远不会到服务器的表单不需要CSRF保护。对于执行基本实用程序(如语言翻译表单)的表单也是如此。

  

csrf令牌应与用户会话ID相关联。什么是匿名用户的等价物? IP地址?

大多数Web框架都为匿名用户提供了有状态会话。例如,PHP使用$_SESSION变量。他们通常在用户的浏览器中将cookie设置为会话ID。您将使用有状态会话来存储CSRF令牌的服务器端副本。

答案 1 :(得分:2)

这取决于您网站的可接受风险级别。

  

这个csrf令牌如何帮助保护匿名用户?

风险是匿名评论将被记入来自该特定匿名用户。也就是说,所有元数据都将指向它们(IP地址,浏览器,操作系统,cookie等),而不是恶意用户和站点。来自CSRF攻击的唯一证据是Originreferer等标题。

  

csrf令牌应与用户会话ID相关联。什么是   等效用于匿名用户? IP地址?

您可以采用与as you can protect against login CSRF相同的方式保护您的网页。这实际上是一种Double Submit Cookies方法。

所以过程是:

  1. HTML表单的HTTP响应包含加密安全随机令牌的Set-Cookie:标头,表单本身包含具有相同令牌的隐藏字段。
  2. 提交表单后,浏览器发送的cookie中的令牌将与隐藏字段中的令牌进行比较。
  3. 这可以防止恶意网站提交跨域表单并且"贷记"它对浏览器用户来说,虽然恶意网站可以使浏览器在令牌中发送cookie,但是他们无法发现令牌值以包含在有效载荷本身中(即合法提交时的隐藏字段)。