Я кодирую инструмент, который при любом URL-адресе периодически выводит его вывод. Проблема заключается в том, что вывод может быть не простой и легкой HTML-страницей (как ожидается, в большинстве случаев), а некоторым тяжелым потоком данных (т. Е. Прямо из/dev/urandom, возможной атаки DoS).Ограничение потока ввода Java: защита от DoS-атак
Я использую java.net.URL
+ java.net.URLConnection
, устанавливая время соединения и время ожидания до 30 секунд. В настоящее время ввод считывается java.io.BufferedReader
, используя readLine()
.
Возможные решения:
- Используйте
java.io.BufferedReader.read()
байт за байтом, считая их и закрытия соединения после предел был достигнут. Проблема заключается в том, что злоумышленник может передавать один байт каждые 29 секунд, так что тайм-аут чтения/соединения почти никогда не будет происходить (204800B * 29сек = 68 дней) - Ограничить выполнение резьбы до 1-5 минут и использовать
java.io.BufferedReader.readLine()
. Любые проблемы здесь?
Я чувствую, что пытаюсь изобретать велосипед, и решение очень прямолинейно, просто мне не приходит в голову.
Заранее спасибо.
Написал LimitedInputStream, расширяющий FilterInputStream с помощью методов overriden read(), которые возвращают -1 (конец поддельного входного потока), когда предел достигнут. Благодаря! – ljank