我正在编写一个工具,给定任何 URL,它会定期获取其输出。问题是输出可能不是一个简单而轻量级的 HTML 页面(在大多数情况下都是预期的),而是一些大数据流(即直接来自 /dev/urandom,可能是 DoS 攻击)。
我正在使用java.net.URL
+ java.net.URLConnection
,将连接和读取超时设置为 30 秒。当前输入正在被 读取java.io.BufferedReader
,使用readLine()
。
可能的解决方案:
java.io.BufferedReader.read()
逐字节使用,对它们进行计数并在达到限制后关闭连接。问题是攻击者可能每 29 秒传输一个字节,因此读取/连接超时几乎不会发生(204800B * 29sec = 68 天)- 将线程执行限制为 1-5 分钟并使用
java.io.BufferedReader.readLine()
. 这里有什么问题吗?
我想重新发明轮子,解决方案非常简单,只是没有想到。
提前致谢。