csrf防范笔记
1.验证Http的refer字段
http有一个refer字段,用以记录该http请求的来源地址
好处: 简单便捷,后台开发人员只需要设置一个拦截器
缺点: Referer 的值是由浏览器提供的,虽然 HTTP 协议上有明确的要求,但是每个浏览器对于 Referer 的具体实现可能有差别。比如 IE6 或 FF2,目前已经有一些方法可以篡改 Referer 值,同时,用户也可以自己设置浏览器使其在发送请求时不再提供 Referer
2.在请求地址中添加token
防范的关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中。可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。
实现: 服务端: token 可以在用户登陆后产生并放于 session 之中,然后在每次请求时把 token 从 session 中拿出,与请求中的 token 进行比对。
客户端: 对于 GET 请求,token 将附在请求地址之后,这样 URL 就变成 http://url?csrftoken=tokenvalue。 而对于 POST 请求来说,要在 form 的最后加上 <input type=”hidden” name=”csrftoken” value=”tokenvalue”/>,这样就把 token 以参数的形式加入请求了。
在一个网站中,可以接受请求的地方非常多,要对于每一个请求都加上 token 是很麻烦的,并且很容易漏掉,通常使用的方法就是在每次页面加载时,使用 javascript 遍历整个 dom 树,对于 dom 中所有的 a 和 form 标签后加入 token
好处: 比refer安全一些
缺点:是难以保证 token 本身的安全。特别是在一些论坛之类支持用户自己发表内容的网站,黑客可以在上面发布自己个人网站的地址。由于系统也会在这个地址后面加上 token,黑客可以在自己的网站上得到这个 token,并马上就可以发动 CSRF 攻击。为了避免这一点,系统可以在添加 token 的时候增加一个判断,如果这个链接是链到自己本站的,就在后面添加 token,如果是通向外网则不加。
3.在http请求中加入自定义属性
也是使用token,但不是把它放在dom内,而是http请求中。通过 XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrfToken 这个 HTTP 头属性,并把 token 值放入其中。
最新文章
- NSArray
- 【C语言入门教程】2.9 小结
- android:照片涂画功能实现过程及原理
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(2)-easyui构建前端页面框架[附源码]
- 不熟悉的CSS样式
- Python基础篇(七)
- php解析ini,conf文件
- ELK-logstash案例实战之读取日志输出到elasticsearch
- 支持向量机(Support Vector Machine):超平面
- 初窥Java之二
- Spring3.x错误---- Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces.
- asp.net Ibatis.net 批量插入数据ORACLE
- Memcache介绍与应用场景
- Rstudio常用快捷键
- Swify闭包
- 【常见的SQL Server连接失败错误以及解决方法】
- Python - selenium_WebDriver 页面元素操作
- hive的安装与配置 mysql安装 启动
- Java 线程 锁
- 指定jdk编译或运行