上周的时候Dmitry突然在5.4发布在即的时候, 引入了一个新的配置项:
- Added max_input_vars directive to prevent attacks based on hash collision
这个预防的攻击, 就是”通过调用Hash冲突实现各种语言的拒绝服务攻击漏洞”(multiple implementations denial-of-service via hash algorithm collision).
攻击的原理很简单, 目前很多语言, 使用hash来存储k-v数据, 包括常用的来自用户的POST数据, 攻击者可以通过构造请求头, 并伴随POST大量的特殊的”k”值(根据每个语言的Hash算法不同而定制), 使得语言底层保存POST数据的Hash表因为”冲突”(碰撞)而退化成链表.
这样一来, 如果数据量足够大, 那么就可以使得语言在计算, 查找, 插入的时候, 造成大量的CPU占用, 从而实现拒绝服务攻击.
PHP5.4是通过增加一个限制来尽量避免被此类攻击影响:
- - max_input_vars - specifies how many GET/POST/COOKIE input variables may be
- accepted. default value 1000
目前已知的受影响的语言以及版本有::
Java, 所有版本
JRuby <= 1.6.5
PHP <= 5.3.8, <= 5.4.0RC3
Python, 所有版本
Rubinius, 所有版本
Ruby <= 1.8.7-p356
Apache Geronimo, 所有版本
Apache Tomcat <= 5.5.34, <= 6.0.34, <= 7.0.22
Oracle Glassfish <= 3.1.1
Jetty, 所有版本
Plone, 所有版本
Rack, 所有版本
V8 JavaScript Engine, 所有版本
不受此影响的语言或者修复版本的语言有::
PHP >= 5.3.9, >= 5.4.0RC4
JRuby >= 1.6.5.1
Ruby >= 1.8.7-p357, 1.9.x
Apache Tomcat >= 5.5.35, >= 6.0.35, >= 7.0.23
Oracle Glassfish, N/A (Oracle reports that the issue is fixed in the main codeline and scheduled for a future CPU)
CVE: CVE-2011-4885 (PHP), CVE-2011-4461 (Jetty), CVE-2011-4838 (JRuby), CVE-2011-4462 (Plone), CVE-2011-4815 (Ruby)
转载:http://www.laruence.com/2011/12/29/2412.html
原文: http://www.ocert.org/advisories/ocert-2011-003.html
其它参考:
http://www.xingdonghai.cn/a-new-supercolliding-with-array-of-php/
http://nikic.github.com/2011/12/28/Supercolliding-a-PHP-array.html
貌似不好解决,只有先限制接收参数的大小了。
分享到:
相关推荐
如果你需要自定义哈希函数或解决冲突的方法,可以继承`std::hash`并重载相关方法,或者直接实现自己的哈希表类。 在实际应用中,选择哪种冲突解决方法取决于具体的需求,如空间效率、时间效率、负载因子等因素。在...
UTHASH 是一个开源的 C 语言库,提供了一种简单且高效的哈希表实现,用于在 C 代码中快速查找和管理数据结构。这个库的主要功能是提供一个宏定义的集合,可以方便地将结构体转化为哈希表,进而进行添加、删除、查找...
HASH冲突的介绍和几种解决方案,用例子来讲述冲突的处理方式。
### 链地址法解决Hash冲突 #### 一、引言 哈希表是一种非常高效的数据结构,通过哈希函数可以快速地定位到数据所在的存储位置。然而,在实际应用中,由于哈希函数的设计和数据分布的原因,经常会出现多个不同的...
在IT领域,理解和掌握哈希表的实现方式至关重要,因为它广泛应用于数据库系统、编程语言解释器以及各种需要高效数据检索的场景。 本文将详细探讨三种常见的哈希表实现方法:链地址法、线性探测法和双重散列表。 1....
《Hash表的构建和冲突解决》文档可能详细介绍了如何构建哈希表、各种哈希函数的设计思路,以及在实际编程中如何运用这些方法来有效地解决冲突。可能涉及的具体内容包括: - 哈希表的基本结构和操作(如插入、删除、...
在“Hash-lookup.zip_hash冲突”这个主题中,我们主要探讨的是在使用哈希表进行查找时遇到的冲突问题以及解决策略。 哈希函数是哈希查找的核心,它的作用是将任意长度的关键字映射到固定大小的哈希表(也称为散列表...
在实际应用中,Java实现的GeoHash算法常用于地理信息系统(GIS)、位置服务和物联网(IoT)等领域,帮助优化空间数据的存储和查询性能。 为了更好地理解并实现GeoHash算法,你可以参考`geoHash`压缩包中的源代码,...
**链地址法处理Hash冲突** 在计算机科学中,哈希表是一种高效的数据结构,它通过哈希函数将数据映射到一个固定大小的数组中,从而实现快速的查找、插入和删除操作。然而,由于哈希函数的局限性,不同的键可能会映射...
"分布式拒绝服务攻击防御技术综述" 分布式拒绝服务攻击防御技术是当前网络安全领域的热点话题。随着网络攻击的日益增长,分布式拒绝服务攻击(DDoS)已经对网络安全造成了极大的威胁。因此,分布式拒绝服务攻击防御...
**正文** `GEOHASH` 是一种地理位置编码技术,它将经纬度坐标转换为字符串,以...通过这些文件,开发者可以学习并理解`GEOHASH`在JavaScript环境中的具体实现,以及如何与地图API结合,实现高效的地理位置索引和查询。
理解哈希函数的构造方法和冲突解决策略是设计和使用哈希表的关键,这对于优化算法和提升软件性能具有重要意义。无论是在字典、集合、去重等基本数据结构的实现,还是在字符串匹配、数据压缩、拼写检查等复杂应用场景...
Hash函数集合,包含主流的hash函数: nginx_hash算法,OpenSSL_hash算法,RSHash,JSHash,PJWHash,ELFHash,BKDRHash,DJBHash,DEKHash,APHash等等!
Hash表是一种数据结构,它通过使用哈希函数将键(key)映射到数组的索引位置,从而实现快速的查找、插入和删除操作。在C语言中,我们可以利用结构体和指针来构建一个简单的Hash表。下面将详细介绍Hash表的概念、哈希...
在IT领域,哈希算法(Hash Algorithm)是一种用于将任意长度的数据转化为固定长度输出的算法。这个过程通常称为哈希或散列。哈希算法在信息安全、数据完整性验证、密码学等多个方面都有着广泛的应用。本项目是用...
Geohash算法实现,经纬度到geohash编码的实现
根据提供的文件信息,我们可以深入分析C语言中哈希表(Hash Table)的实现方式与具体细节。本篇文章将从以下几个方面展开讨论: 1. **哈希表的基本概念** 2. **哈希函数的设计** 3. **哈希表的创建与管理** 4. **...
GeoHash算法是一种基于地理坐标的分布式空间索引技术,它通过将地球表面的经纬度坐标转化为可比较的字符串,使得我们可以高效地进行地理位置的搜索、范围查询以及邻居查找等操作。这种算法尤其适用于大数据和分布式...
哈希(Hash)算法在计算机科学中扮演着重要的角色,特别是在数据存储、文件校验、信息安全等领域。本文将深入探讨哈希算法的原理,并提供一个简单的C语言实现示例。 哈希算法,又称为散列函数,是一种将任意长度的...
此外,混沌-HASH构造还可以应用于数字签名和消息认证码(MAC)。在数字签名中,混沌生成的密钥可以用来加密消息的哈希值,提供对发送者身份的验证。而在MAC中,混沌和HASH的组合可以确保只有持有特定密钥的接收方才能...