hash table在php中由为重要。存储变量的'符号表',array和object存储的数据结构,执行上下文的变量及函数均使用哈希表结构存储。

Hash,简单来讲,是一种将任意长度的输入变换成固定长度的输出的算法,固定长度是有取值范围的,所以hash就存在不同数值有相同hash值的可能性,也就是hash碰撞。

解决碰撞问题常用的两种方法:碰撞解决大体有两种思路,第一种是根据某种原则将被碰撞数据定为到其它桶,例如线性探测——如果数据在插入时发生了碰撞,则顺序查找这个桶后面的桶(如下图的第2个格子),将其放入第一个没有被使用的桶;第二种策略是每个桶不是一个只能容纳单个数据项的位置,而是一个可容纳多个数据的数据结构(例如链表或红黑树),所有碰撞的数据以某种数据结构的形式组织起来。

不论使用了哪种碰撞解决策略,都导致插入和查找操作的时间复杂度不再是O(1)。以查找为例,不能通过key定位到桶就结束(如下图的第2个格子),必须还要比较原始key(即未做哈希之前的key)是否相等,如果不相等,则要使用与插入相同的算法继续查找,直到找到匹配的值或确认数据不在哈希表中。

哈希表碰撞攻击就是通过精心构造数据,使得所有数据全部碰撞,人为将哈希表变成一个退化的单链表,此时哈希表各种操作的时间均提升了一个数量级,因此会消耗大量CPU资源,导致系统无法快速响应请求,从而达到拒绝服务攻击(DoS)的目的。

更详细的攻击方法以及原理:

http://www.nowamagic.net/librarys/veda/detail/1367

防御

思路:阻止php里获取外界输入而直接生成数组的点,譬如:(对用户传过来的数据直接json_encode,unserialize),系统会自动把客户端提交的数据生成POST,cookie数组。

POST攻击的防护:针对POST方式的哈希碰撞攻击,目前PHP的防护措施是控制POST数据的数量。在>=PHP5.3.9的版本中增加了一个配置项max_input_vars,用于标识一次http请求最大接收的参数个数,默认为1000。因此PHP5.3.x的用户可以通过升级至5.3.9来避免哈希碰撞攻击。5.2.x的用户可以使用这个patch:http://www.laruence.com/2011/12/30/2440.html。

另外的防护方法是在Web服务器层面进行处理,例如限制http请求body的大小和参数的数量等,这个是现在用的最多的临时处理方案。具体做法与不同Web服务器相关,不再详述。

上面的防护方法只是限制POST数据的数量,而不能彻底解决这个问题。例如,如果某个POST字段是一个json数据类型,会被PHP json_decode,那么只要构造一个超大的json攻击数据照样可以达到攻击目的。理论上,只要PHP代码中某处构造Array的数据依赖于外部输入,则都可能造成这个问题,因此彻底的解决方案要从Zend底层HashTable的实现动手。一般来说有两种方式,一是限制每个桶链表的最长长度;二是使用其它数据结构如红黑树取代链表组织碰撞哈希(并不解决哈希碰撞,只是减轻攻击影响,将N个数据的操作时间从O(N^2)降至O(NlogN),代价是普通情况下接近O(1)的操作均变为O(logN))。

目前使用最多的仍然是POST数据攻击,因此建议生产环境的PHP均进行升级或打补丁。至于从数据结构层面修复这个问题,目前还没有任何方面的消息。

php 哈希碰撞攻击,浅谈php的哈希碰撞相关推荐

  1. 获取文件哈希值_浅谈查找---哈希查找

    在上一篇综述中,我给出了排序是为了更快的查找这个观点.也介绍了查找的一些典型应用场景如: 1.判断一个给定值,是否在一个数组 2.mysql 的查询优化 3.再到给定a.b两个文件,各存放50亿个ur ...

  2. 浅谈几种区块链网络攻击以及防御方案之51#37攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/11/network_attack_of_blockchain_51_attack/ 写在前面的话 自比特币诞生 ...

  3. 浅谈几种区块链网络攻击以及防御方案之拒绝服务攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/14/network_attack_of_blockchain_ddos_attack/ 写在前面的话 自比特币 ...

  4. 浅谈几种区块链网络攻击以及防御方案之女巫攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/13/network_attack_of_blockchain_sybil_attack/ 写在前面的话 自比特 ...

  5. 浅谈几种区块链网络攻击以及防御方案之日蚀攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/12/network_attack_of_blockchain_eclipse_attack/ 写在前面的话 自 ...

  6. 24-哈希碰撞攻击是什么?

    24-哈希碰撞攻击是什么? 最近哈希表碰撞攻击(Hashtable collisions as DOS attack)的话题不断被提起,各种语言纷纷中招.本文结合PHP内核源码,聊一聊这种攻击的原理及 ...

  7. 浅谈算法和数据结构: 哈希表

    作者: yangecnu(yangecnu's Blog on 博客园) 出处:http://www.cnblogs.com/yangecnu/  http://www.cnblogs.com/yan ...

  8. 浅谈几种区块链网络攻击以及防御方案之其它网络攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/16/network_attack_of_blockchain_other_attack/ 写在前面的话 自比特 ...

  9. 哈希洪水攻击是什么?

    洪水攻击作为黑客最常用的一种攻击手段,以实施简单粗暴著名,而且它大多无视防御.洪水攻击同时也是信息安全领域,最值得研究的课题之一. 洪水攻击作为黑客最常用的一种攻击手段,以实施简单粗暴著名,而且它大多 ...

最新文章

  1. SCVMM2012 SP1 之虚拟机模板的创建
  2. matlab校正环节,基于MATLAB的控制系统校正环节优化设计
  3. tf.device()指定tensorflow运行的GPU或CPU设备
  4. TalkingData CTO肖文峰:研发工程师,你为啥升不上去?
  5. 用python爬虫抓站的一些技巧总结
  6. redis 安装测试
  7. iOS图片编辑功能实现
  8. 【深度学习】——训练过程
  9. SQL Server下载安装
  10. 微信小程序下载文件,后端PHP处理流程
  11. Problem : 美丽黄山II
  12. nginx: [warn] conflicting server name “xxx“ on 0.0.0.0:80解决
  13. html2canvas实现网页局部存为图片和打印
  14. Spring Boot 2.x基础教程:使用Spring Data JPA访问MySQL我们得从哪入手
  15. C语言——PTA 埃尔米特多项式
  16. 记录nodejs使用express搭建一个api服务器程序(5)-nodejs操作SQL数据库,Sequelize和Knex
  17. Windows操作系统截屏快捷键
  18. RISC-V基金会董事谭章熹:RISC-V,从边缘逐渐向中央扩展
  19. 电脑连不上手机热点了
  20. 产品经理和项目经理的区别,读这一篇就够了!(史上最全总结)

热门文章

  1. vue中radio、select设置默认选中
  2. 漫画:什么是数据仓库?
  3. Mac应用安装:允许任何来源
  4. 年华细碎,遗漏的半夏锦年
  5. HDU 5536 Chip Factory (01字典树)
  6. 【SQL Server】---SQL Server 2008 R2数据库导入(还原).bak文件
  7. jquery改变css样式
  8. diskgenius创建efi分区_Windows重建EFI引导启动分区(esp分区)
  9. 成人用品发展前景与走向
  10. 初始C语言——小球落地问题