防止CSRF?

时间:2012-01-03 18:06:07

标签: csrf

我已经从这里看到了一些问题(stackoverflow)和 THIS 帖子,但我还是有一些问题......

  1. 在帖子表单中使用隐藏值,并在帖子到达服务器时进行检查。

    • 隐藏的价值可以很容易地被复制并发送,就像真实的一样,“难以猜测”(如md5)也无济于事。 (右?)
  2. 到达表单时设置cookie并将cookie值作为隐藏值发送。

    • 您可以使用相同的真实隐藏值轻松更改Cookie值或发送与真实Cookie完全相同的自定义Cookie。 (右?)
  3. 使用'超时',POST值不能太晚。

    • 所以,如果你慢了,当你试图用隐藏值设置一切时,你将会失败。如果你很快就会工作。 (右?)
  4. 我希望受到CSRF保护......但我究竟是怎么做到的?

2 个答案:

答案 0 :(得分:6)

我发现阻止CSRF问题的最简单方法是:

  1. 在服务器端,使用随机(不可取的)令牌为客户端分配cookie

  2. 使用该Cookie值

  3. 在表单上放置一个隐藏字段
  4. 提交表单后,确保隐藏字段值等于cookie值(在服务器端)

答案 1 :(得分:0)

如果您做出以下更改,那么我认为您是安全的

  • 不应该通过GET(或更好的POST)允许数据更新(因为两者都可以通过HTML表单使用)
  • 禁用服务器上的CORS(或至少在关键和/或更改数据的端点上)
  • 允许仅使用JSON的API(即至少只接受关键端点上的JSON输入)

只是添加到上面:不要使用方法覆盖,也不支持旧浏览器。