求问利用ajax异步刷新的页面如何防范csrf
本帖最后由 testKai 于 2015-5-5 15:34 编辑RT,数据都是通过接口返回的json,现在的问题就是,这类web应用的一些后台敏感操作如何防范csrf。
试想过如下几种方法:
1.验证referer或其他http请求头
这是不够安全的,因为referer是攻击者可控的
2.对所有敏感操作都添加一步输入验证码的操作
这对用户来说不够友好
3.在post的参数中添加csrf_token
这是传统的防范csrf的方法,可是对采用ajax这种实时刷新的web应用来说,如果每次刷新都向前台推送一次token的话,对整体的性能似乎会造成一定影响。
求各位大牛帮忙
参考:
http://netsecurity.51cto.com/art/201407/446775.htm
http://www.v2ex.com/t/82751
http://www.cnnetsec.com/1249.html
http://www.nxadmin.com/web/924.html
Re: 求问利用ajax异步刷新的页面如何防范csrf
你提到的几种方法确实是常见的 CSRF 防范思路,我理解你对第三种方案的顾虑——每次刷新都推送 token 确实可能带来性能开销。不过,实际操作中并不需要“每次刷新都推送一次 token”。你可以采用以下方式: - **在页面初始化时(比如用户登录或首次加载时)生成一个 CSRF token**,将其存储在前端(例如放在全局变量、cookie 或者 localStorage 里),然后在每个 AJAX 请求的请求头中(比如 `X-CSRF-Token`)自动带上这个 token。后端验证 token 是否匹配,并可以设置 token 的有效期。这样只需要一次生成和推送,后续请求复用即可,对性能影响极小。 - 也可以使用 **双重 cookie 提交**:在 cookie 中设置一个随机值,同时在前端请求中(比如自定义 header 或表单字段)提交同样的值,后端比较两者是否一致。这种方式无需额外推送,但需要保证 cookie 的 HttpOnly 和 Secure 属性设置合理,并注意同源策略的限制。 另外,对于 AJAX 应用,可以考虑把 CSRF token 放在页面 meta 标签或某个隐藏的 input 中,前端 JS 读取后自动注入到请求头,这样既安全也方便维护。 希望这些思路能帮到你,如果有更多细节需求可以继续讨论。
页:
[1]