hash collision攻击的延续

前段时间的hash collision导致拒绝服务的攻击,各种WEB容器都进行了修补。

GET方法因为客房端和服务端本身的实现基本可以限制URL的长度而不至于产生大量key-value。

 大多数http服务器和WEB容器都是判断POST数据中参数个数,如x-www-form-urlencoded时判断&的个数,multipart时判断boundary的个数,超过一定个数即认为是攻击。

但是只要应用端使用map(特别是类似java的HashMap实现)作为底层数据存储的都会被攻击,比如一个大量相同hashcode组成key的json文本被转换为JSONObject时,

底层被将这些key存入HashMap,你无法根据字符串特征过虑JSON文本,结果还是绕过http服务器或者WEB容器而攻击成功。

 

所以实现一个不可推导的hash算法代替现有的hashMap,是解决这个问题最可靠的方案。

对于一个实例MyHashMap产生一个随机的值,在实例生命周期内值是固定的,而对不同实例这个值又是随机的。这个值参与到hash算法中,可以防止根据源码分析

而产生相同hash值,这一步必不可少。

你可能感兴趣的:(java,json,算法,Web,HTTP服务器,HashMap)