目前防御 CSRF 攻击主要有三种策略:

1、 验证 HTTP Referer 字段;

根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。对于每一个请求验证其 Referer 值

2、在请求地址中添加 token 并验证;

可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。

这种方法要比检查 Referer 要安全一些,token 可以在用户登陆后产生并放于 session 之中,然后在每次请求时把 token 从 session 中拿出,与请求中的 token 进行比对。

对于 GET 请求,token 将附在请求地址之后,这样 URL 就变成 http://www.wuliaokankan.cn?csrftoken=tokenvalue。

而对于 POST 请求来说,要在 form 的最后加上 <input type=”hidden” name=”csrftoken” value=”tokenvalue”/>,这样就把 token 以参数的形式加入请求了。但是,在一个网站中,可以接受请求的地方非常多,要对于每一个请求都加上 token 是很麻烦的,并且很容易漏掉,通常使用的方法就是在每次页面加载时,使用 javascript 遍历整个 dom 树,对于 dom 中所有的 a 和 form 标签后加入 token。这样可以解决大部分的请求,但是对于在页面加载之后动态生成的 html 代码,这种方法就没有作用,还需要程序员在编码时手动添加 token。

缺点:难以保证 token 本身的安全

为了避免这一点,系统可以在添加 token 的时候增加一个判断,如果这个链接是链到自己本站的,就在后面添加 token,如果是通向外网则不加。不过,即使这个 csrftoken 不以参数的形式附加在请求之中,黑客的网站也同样可以通过 Referer 来得到这个 token 值以发动 CSRF 攻击。

3、在 HTTP 头中自定义属性并验证。

这种方法也是使用 token 并进行验证,和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。这样解决了上种方法在请求中加入 token 的不便,同时,通过 XMLHttpRequest 请求的地址不会被记录到浏览器的地址栏,也不用担心 token 会透过 Referer 泄露到其他网站中去。

然而这种方法的局限性非常大。XMLHttpRequest 请求通常用于 Ajax 方法中对于页面局部的异步刷新,并非所有的请求都适合用这个类来发起,而且通过该类请求得到的页面不能被浏览器所记录下,从而进行前进,后退,刷新,收藏等操作,给用户带来不便。另外,对于没有进行 CSRF 防护的遗留系统来说,要采用这种方法来进行防护,要把所有请求都改为 XMLHttpRequest 请求,这样几乎是要重写整个网站,这代价无疑是不能接受的。

CSRF攻击防御方法相关推荐

  1. 小鸟云:5种CC攻击防御方法

    一.CC攻击简介: 随着网络技术的迅猛发展和普及,网络已改变每一个人的生活和工作方式,网络安全问题也越来越严重.近几年,网络入侵的频率不断增加,危害性日趋严重,其中分布式拒绝服务攻击(DDoS)的危害 ...

  2. XSS及CSRF攻击防御

    一.概念: XSS攻击全称跨站脚本攻击(Cross Site Scripting); CSRF(Cross-site request forgery)跨站请求伪造,也被称为"One Clic ...

  3. ddos攻击工具_简单有效的ddos攻击防御方法

    做过网站的站长大多有被ddos攻击的经历,不少人面对竞争对手的网站就是直接雇人ddos攻击网站,导致对方网站长期打不开,最后无奈关闭网站,初尧今天就告诉大家一个最简单也是最有效的防御方法. 高防服务器 ...

  4. csrf攻击防御 php,Yii2.0防御csrf攻击方法

    yii2中无论是用测试工具POSTMAN.用命令行CURL请求.ajax请求总是会得到http400:Bad Request的错误:而如果用Web网页方式GET访问(去除verbFilter的POST ...

  5. DDoS 攻击防御方法

    网络层 DDoS 防御 限制单 IP 请求频率. 网络架构上做好优化,采用负载均衡分流. 防火墙等安全设备上设置禁止 ICMP 包等. 通过 DDoS 硬件防火墙的数据包规则过滤.数据流指纹检测过滤. ...

  6. nodejs mysql 注入_node.js sql 注入攻击防御方法 (sql Injection)

    sql 注入的原理和方法应该都知道了,这里记录一下node-mysql提供的现成的api https://github.com/felixge/node-mysql node-mysql 提供了接口 ...

  7. SQL注入攻击的原理、分类和防御方法

    一.SQL注入攻击原理 恶意用户在提交查询请求的过程中将SQL语句插入到请求内容中,同时程序本身对用户输入内容过分信任而未对恶意用户插入的SQL语句进行过滤,导致SQL语句直接被服务端执行. 二.SQ ...

  8. Web后端学习笔记 Flask(10)CSRF攻击原理

    CSRF(Cross Site Request Forgery,跨站域请求伪造)是一种网络的攻击方式,它在2007年曾被列为互联网20大安全隐患之一. CSRF攻击的原理: 网站是通过cookie实现 ...

  9. XSS和CSRF攻击

    一.XSS攻击(跨脚本攻击) 是一种普遍的Web应用安全漏洞.这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻 ...

最新文章

  1. matlab积分与绘图
  2. bootstrap easyUI 的选型
  3. java 编写 欢迎你_社团联合会——java编程协会欢迎你的加入
  4. 【数据结构基础】【散列表】
  5. Django 如何展示Media底下的图片
  6. Oracle 的成功无法复制,国产数据库该如何突破?
  7. 4. PHP 操作 memcache(1)
  8. java打印sscil码_SSCI期刊投稿指南库
  9. 托业考试简述 — 托业考试题型、托业考试结构、托业考试考场时间、托业考试学习策略
  10. 简要的谈谈文本数据挖掘的一般步骤
  11. JDBC 和数据库连接池
  12. 移动端可以查看的设计APP,推荐给大家
  13. gephi mysql_用Gephi移动多个节点(Moving multiple nodes with Gephi)
  14. 《计算机网络》章节重要概念
  15. [TJOI2013]松鼠聚会【切比雪夫距离转换曼哈顿距离】
  16. 小孩学计算机技术有什么好处,儿童学习电脑的好处
  17. 利达主机联网接线端子_利达接线图介绍
  18. 最不常用置换算法LFT 最久未使用置换算法LRU 操作系统 C语言链表实现
  19. 996普遍吗_网络常识不是太普遍
  20. 【券后价12.20元】【包邮】超能天然皂粉1028g1袋装家用肥皂粉正品家庭实惠装洗衣粉香味持久...

热门文章

  1. 数字设计小思 - D触发器与死缠烂打的亚稳态
  2. 设计模式沉思录读后感
  3. 不错的耳机 Grado PS-1 全球限量版本
  4. 论写出大众欣赏的作品之无比艰难
  5. 3.7 私信列表-私信详情
  6. exe4j 关闭命令行窗口运行
  7. java 快递查询接口
  8. 『TensorFlow』第九弹_图像预处理_不爱红妆爱武装
  9. 不就是个短信登录API嘛,有这么复杂吗?(转载)
  10. 推荐Flash:《我不想说我是鸡》