【问题标题】:How to Prevent Dos attack for BufferedReader readLine() method in Java?如何防止 Java 中 BufferedReader readLine() 方法的 Dos 攻击?
【发布时间】:2023-04-07 19:07:01
【问题描述】:

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

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

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

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

【问题讨论】:

标签: java bufferedreader denial-of-service


【解决方案1】:

使用Socket.setSoTimeout(int)

引用自javadoc

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

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

还要注意从这一行开始

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

在执行read 操作之前,您必须调用Socket.setSoTimeout(int)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-04
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多