4

我有一种情况,我使用 BufferedReaderreadLine()从套接字读取数据,但readline()读取数据直到它在数据中找到换行符/回车符。
如果我的数据不包含换行符,那么它将继续读取数据,直到找到新行并且入侵者可以注入 DOS 攻击。甚至套接字也会超时。

我知道一种解决方案可能是我们需要限制行大小并只读取一些数据,并将数据附加到缓冲区。

它是最佳解决方案还是我可以以其他方式做到这一点?

我可以覆盖 BufferedReader 并覆盖 readLine() 方法。是否可行的解决方案?

4

1 回答 1

1

利用Socket.setSoTimeout(int)

引用javadoc

使用指定的超时启用/禁用 SO_TIMEOUT,以毫秒为单位。将此选项设置为非零超时,对与此 Socket 关联的 InputStream 的 read() 调用将仅阻塞此时间量。

如果超时到期,则会引发 java.net.SocketTimeoutException,尽管 Socket 仍然有效。必须在进入阻塞操作之前启用该选项才能生效。超时必须 > 0。超时为零被解释为无限超时。

另请注意,从这一行

必须在进入阻塞操作之前启用该选项才能生效。

您必须Socket.setSoTimeout(int)在进行read操作之前致电。

于 2014-09-01T14:54:12.463 回答