在没有所有形式的隐藏输入的情况下防止CSRF

时间:2012-07-22 21:19:20

标签: php html security csrf

我想知道是否可以将crsf令牌放在<head>,元标记或其他内容上,然后在我的服务器上访问它。它将真正简化流程并使其更加透明。我只是不知道如何。我真的希望在没有javascript的情况下这样做。

我认为rails实现了类似的东西......可能会使用etags吗?

2 个答案:

答案 0 :(得分:3)

CSRF令牌的基本目的是在每次提交表单时将其传送回服务器。您将唯一令牌传递给页面,当提交该页面上的表单时,令牌会随之返回。

如果您没有在表单上包含令牌(或使用JavaScript以编程方式将令牌添加到当前页面上其他位置的表单),则不会将其发送回服务器。

也许更好的问题是:你真正想要完成的是什么?换句话说,为什么你不想在表单中包含CSRF令牌?您希望在您的方案中克服哪些缺点?

答案 1 :(得分:3)

CSRF prevention cheat sheet上列出了许多方法。在每个表单上都不需要隐藏字段的是to check the referer。请记住,缺少引用程序应被视为CSRF攻击,并可能导致某些隐私浏览器插件出现问题(这种情况非常罕见)。