如何防止Java中的BufferedReader readLine方法受到Dos攻击?

问题描述

| 我遇到的情况是我使用BufferedReader
readLine()
套接字读取数据,但是
readline()
读取数据,直到它在Data中找到换行符/返回回车为止。 而且,如果我的数据不包含换行符,则它将继续读取数据,直到找到新行并且入侵者可以注入DOS攻击为止。 甚至套接字也会超时。 我知道一种解决方案可能是我们需要限制行大小并仅读取一些数据,然后将数据追加到缓冲区。 是最佳解决方案还是我可以通过其他方式做到? 我可以重写BufferedReader和重写readLine()方法。这是可行的解决方案吗?     

解决方法

        使用
Socket.setSoTimeout(int)
从Javadoc引用   以指定的超时时间启用/禁用SO_TIMEOUT,以毫秒为单位。通过将此选项设置为非零超时,与此套接字关联的InputStream上的read()调用将仅在此时间量内阻塞。      如果超时到期,则尽管Socket仍然有效,但将引发java.net.SocketTimeoutException。必须先启用该选项,然后才能执行阻止操作。超时必须大于0。零超时被解释为无限超时。 另请注意,从这一行   必须先启用该选项,然后才能执行阻止操作。 在执行
read
操作之前,您必须致电
Socket.setSoTimeout(int)
。