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. Spark 0.8 集群(CentOS6.4)-简单统计测试
  2. OpenCV实现RGB颜色空间和HSI颜色空间的相互转换
  3. Java通过JDBC连接SQL Server2017数据库
  4. c++ 每半个小时打印一次_有了3D打印机,后期该如何维护呢
  5. linux mysql异机备份_Linux环境下oracle数据库Rman备份异机恢复
  6. 【华为云技术分享】区块链与数据库如何结合?
  7. 画数轴的步骤_上分助手北师大数学七年级上册第二章有理数第二节数轴详细拆解...
  8. VS2013配置PDFLib 9.1.2的环境
  9. 《微信小程序-进阶篇》组件封装-Icon组件的实现(二)
  10. 基于Springboot实现汽车4S店销售管理系统
  11. 大气数据计算机输出形式,大气数据计算机
  12. 基于3DGIS的智慧“云”综合产业园区建设
  13. 《Kotlin从零到精通Android开发》面世啦
  14. 业务持续计划(BCP,Business Continuity Plan)
  15. latex 公式编号
  16. 读书狂想之《平凡的世界》不平凡的人生
  17. word中mathtype公式编辑
  18. 内核参数tcp_tw_reuse=2,对高并发的服务有影响吗?
  19. django问卷html,Django:动态问卷系统的Model设计
  20. 设计大牛不愿意告诉小白的6款设计软件

热门文章

  1. 典型的学生思维有哪些
  2. java 两个运算符重载_Java中的操作符重载
  3. rmbp装oracle11g
  4. educoder第2关:任务2-CTGU实验2-查询27
  5. 计算机网络残值率,电脑打印机折旧年限和残值率
  6. latex 参考文献 natbib, biblatex 引用网页,超链接
  7. 爬虫-豆瓣-2021.7.23-书籍排行榜前30页及每页读者和地址信息
  8. nginx-ingress蓝绿部署权重测试
  9. jQuery如何修改CSS样式?
  10. 一道超简单的base64