拒绝服务攻击漏洞-Hash
攻击的原理很简单, 目前很多语言, 使用hash来存储k-v数据, 包括常用的来自用户的POST数据, 攻击者可以通过构造请求头, 并伴随POST大量的特殊的”k”值(根据每个语言的Hash算法不同而定制), 使得语言底层保存POST数据的Hash表因为”冲突”(碰撞)而退化成链表.
这样一来, 如果数据量足够大, 那么就可以使得语言在计算, 查找, 插入的时候, 造成大量的CPU占用, 从而实现拒绝服务攻击.
例如:如果用求莫方式解决冲突的 Hash 那么 可以构造 一类列 莫相同的key .
此时假设Hash 表的最大长度为 n ,利用冲突插入了M个值,那么 查找的时间复杂度就变为 O(N) [哈希最优情况下搜索复杂的为O(1)],而插入算法的复杂度则变化为:O(n*M).
参考链接
http://www.laruence.com/2011/12/29/2412.html
http://sebug.net/vuldb/ssvid-26122
http://zh.wikipedia.org/wiki/%E5%93%88%E5%B8%8C%E8%A1%A8
http://www.hudong.com/wiki/%E5%93%88%E5%B8%8C%E8%A1%A8%E7%AE%97%E6%B3%95