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 值放入其中。

最新文章

  1. NSArray
  2. 【C语言入门教程】2.9 小结
  3. android:照片涂画功能实现过程及原理
  4. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(2)-easyui构建前端页面框架[附源码]
  5. 不熟悉的CSS样式
  6. Python基础篇(七)
  7. php解析ini,conf文件
  8. ELK-logstash案例实战之读取日志输出到elasticsearch
  9. 支持向量机(Support Vector Machine):超平面
  10. 初窥Java之二
  11. Spring3.x错误---- Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces.
  12. asp.net Ibatis.net 批量插入数据ORACLE
  13. Memcache介绍与应用场景
  14. Rstudio常用快捷键
  15. Swify闭包
  16. 【常见的SQL Server连接失败错误以及解决方法】
  17. Python - selenium_WebDriver 页面元素操作
  18. hive的安装与配置 mysql安装 启动
  19. Java 线程 锁
  20. 指定jdk编译或运行

热门文章

  1. ADO.NET-temple
  2. EclipseADT(4.2) 安装 STS(spring )
  3. centos 安装 htop
  4. HTML border CSS输出三角形
  5. sql join相关
  6. Android中使用HttpURLConnection实现GET POST JSON数据与下载图片
  7. android IntentService生命周期问题
  8. 在SAE安装原版WORDPRESS(图文讲解)
  9. Django之中间件-CSRF
  10. Git分支中的远程操作实践