攻击原理:
当客户端发送一个请求到服务器,如果该请求中带有参数,服务器端会将参数名-参数值作为key-value保存在HashMap中。如果有人恶意构造请求,在请求中加入大量相同hash值的String参数名(key),那么在服务器端用于存储这些key-value对的HashMap会被强行退化成链表,如图:
如果数据量足够大,那么在查找,插入时会占用大量CPU,达到拒绝服务攻击的目的。
怎么处理:
- 限制POST和GET请求的参数个数
- 限制POST请求的请求体大小
- Web Application FireWall(WAF)
JDK7如何处理:
HashMap会动态的使用一个专门TreeMap实现来替换掉它。