有人在SO上讨论like this声称匿名表单不需要csrf保护。查看stackoverflow html代码,未登录时,可以看到csrf令牌 在作为匿名用户发帖时设置为答案框。
答案 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攻击的唯一证据是Origin
和referer
等标题。
csrf令牌应与用户会话ID相关联。什么是 等效用于匿名用户? IP地址?
您可以采用与as you can protect against login CSRF相同的方式保护您的网页。这实际上是一种Double Submit Cookies方法。
所以过程是:
Set-Cookie:
标头,表单本身包含具有相同令牌的隐藏字段。这可以防止恶意网站提交跨域表单并且"贷记"它对浏览器用户来说,虽然恶意网站可以使浏览器在令牌中发送cookie,但是他们无法发现令牌值以包含在有效载荷本身中(即合法提交时的隐藏字段)。