РЕДАКТИРОВАТЬ , кстати, суть обходного пути здесь состоит в том, чтобы повторно использовать все существующие HashMap (например, ConcurrentHashMap и т. Д.) Вместо того, чтобы заново изобретать колесо. Языки, использующие рандомизированные хеш-функции (например, Perl), защищены от этой атаки.
В свете самого недавнего и разрушительного DDoS, использующего известный недостаток в нескольких реализациях hashmap (которые, как известно, влияют на веб-серверы Java, но также и на PHP и другие), Apache Tomcat только что выпустил «исправление» в виде патча. позволяет ограничить максимально допустимое количество параметров в запросе POST (исправьте ваш Tomcat до 6.0.35+ или 7.0.23+ кстати).
(D) DoS, по-видимому, в основном использует тот факт, что строки могут быть обработаны таким образом, что они сталкиваются при хешировании, и что многие веб-серверы "тупо" помещают параметры ключ / значение в (битые) хеш-карты.
Мне было интересно, можно ли написать декоратор вокруг HashMap {String, String}, чтобы к каждой строке добавлялось случайное (случайное с точки зрения атакуемого) значение в строку, например это:
... get( String s ) {
return wrappedBrokenMap.get( s + crunch(s );
}
... put( String key, String value ) {
wrappedBrokenMap.put( s + crunch(s), value );
}
А вот одна из реализаций crunch (...) (это просто пример, смысл в том, что злоумышленник не знает реализацию):
private static final int MY_MAGICAL_NUMBER = 0x42BABE; // attacker doesn't know that number
private static String crunch( String s ) {
return s.length + "" + MY_MAGICAL_NUMBER;
}
Если для любой строки s crunch (s) возвращает воспроизводимую строку, которую злоумышленник не может угадать, атака DDoS была эффективно предотвращена, верно?
Будет ли это работать?