对付 crsf 的关键在于让恶意网站无法伪造信息,那么为什么要那么复杂?

2016-10-28 16:17:23 +08:00
 petelin

我知道现在的避免 crsf 做法,也看过 django 的中间件的实现.

但是,恶意网站所能做的事情很少啊,比如他是不能任意添加 HEAD 的,这是 cors 的限制,简单请求你只能自定义那几个方法,复杂请求更安全了,恶意网站都发不了请求. (这句话对吗?)

所以我们可以直接在后端验证一下有没有自定的 header, 对应的值对不对,注意这个是静态的 header,整个网站都一样的.

但是没人这么做过,应该是不对,所以请问各位那里错了?

2924 次点击
所在节点    问与答
32 条回复
Mutoo
2016-10-28 18:01:38 +08:00
@falcon05 一针见血, GET 请求也是 Request Header 的一部分。
gamexg
2016-10-28 18:02:19 +08:00
falcon05
2016-10-28 18:04:59 +08:00
@Mutoo 如果按规范的话, GET 请求不会改变服务器状态,所以 csrf 并不需要对 get 请求处理。但是很多网站并没有按套路出牌……
falcon05
2016-10-28 18:08:30 +08:00
@petelin 习惯吧,因为觉得 token 跟 cookie 有关系,而 cookie 是有过期时间的,所以习惯性地也把 header 的 token 搞一个过期时间,我记得 CI 框架就是有这个配置,其实我觉得静态 header 的 token 也未尝不可
Mutoo
2016-10-28 18:10:48 +08:00
@falcon05 确实,把 token 放在 X-CSRF-TOKEN 里更合理些。

静态的 header 并不安全。如果黑客对恶意网站有完整的控制权,可以直接伪造完整的 request 。一样可以 CSRF
billlee
2016-10-28 19:29:37 +08:00
自定义 header 肯定能防 csrf, 但是,但那毕竟要用 ajax 才能实现,如果不用 javascript, 就只能用 csrf token 了。
20150517
2016-10-28 19:38:20 +08:00
@Mutoo GET 是没有 X_REQUESTED_WITH 的,所以你说的 img 没法实现
20150517
2016-10-28 19:41:45 +08:00
@Mutoo 另外如果你对恶意网站完整控制权,你发的 request 只是你网站发的,这又怎么样?没看懂
oott123
2016-10-28 21:10:11 +08:00
🌚仅对 10 楼:如果恶意网站能拿到你的 cookie ,那它也用不着去 csrf 你了。
cmxz
2016-10-28 21:27:42 +08:00
楼主的想法确实没错。
另外 CORS 在发添加自定义 header 的请求前会发送预检请求( options ),如果服务端不对预检请求做正确响应,那么 CORS 的自定义 header 是无法发出的。
flash 的跨域,如果我没有记错的话, 1.域名下的 crossdomain.xml 中别随便授权域
2.本域和 crossdomain.xml 中授权的域下别随便放网上找到 swf 文件
3.本域和 crossdomain.xml 中授权的域下别随便允许上传文件(非 swf 的也不能允许,如果因业务必须允许,那需要做一些其他的操作,就不详述了)
做好以上 3 点,应该就 ok 了
ps :从回帖看 v2 上好多人都没完全理解 csrf
petelin
2016-10-28 22:13:53 +08:00
@cmxz 大神总是出来的晚,学习
msg7086
2016-10-29 05:52:48 +08:00
没记错的话 CSRF 是早于 CORS 出现的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/316227

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX