【发布时间】:2017-01-11 19:06:15
【问题描述】:
防止 CSRF 的常见模式是让服务器生成带有随机标记的表单中的隐藏输入。然后服务器期望在表单提交时看到这个令牌。
另一个常见的模式是cookie-to-header 模式。在这种情况下,令牌被放在一个 cookie 中(没有HttpOnly),并且该令牌预计会出现在 cookie 和标头中的未来请求中。页面上的 Javascript 有望处理此问题。这种方法的一个优点是服务器不必保持状态。另一个是 GET 也是安全的(当然,GET 无论如何都不应该改变状态)。
您通常根据您的网站是否为 SPA 来选择其中一个。但是为什么不只是 always 在 cookie 中发送令牌,并期望它返回 either 在 header 和 cookie 中,or 在表单中在饼干里?前一种情况与上面的 cookie-to-header 方法完全相同,而后者则希望表单在客户端中填充隐藏字段(即通过 javascript)。后者只需要一点 JS 的 sn-p 即可在文档就绪时运行。这对于编写框架的人来说要容易得多,因为只有一个系统可以实现(并且没有状态);对于使用 Web 框架的人来说,这要容易得多,因为他们不必记住为每个表单添加隐藏字段。而且它似乎更安全,因为 GET 得到了处理。
是否有任何缺点(除了要求客户端运行javascript)?我认为我没有在任何地方看到实施或讨论过这个想法。
【问题讨论】:
标签: forms security cookies csrf csrf-protection