如何解决这种拒绝服务问题的可能性?

时间:2019-07-11 11:08:06

标签: java spring-boot http security

我们的应用程序中已报告以下安全漏洞-

  

xyz.java第119行对readLine()的调用可能使攻击者能够   导致程序崩溃或以其他方式使其无法使用   用户。

具有漏洞的代码
报告了评论行-

BufferedReader reader = new BufferedReader(new InputStreamReader(
                        httpConnection.getInputStream()));
                String inputLine;
                StringBuffer okResponse = new StringBuffer();
                while ((inputLine = reader.readLine()) != null) { //readLine() on this line has been reported
                    okResponse.append(inputLine);
                }
                reader.close();
                return okResponse.toString();

针对相同内容的补救措施-

  

验证用户输入,以确保不会引起不当行为   资源利用率。

但是,尚不清楚可以确切验证哪些内容。有指针吗?

1 个答案:

答案 0 :(得分:2)

理论上,攻击者可以通过httpConnection向您发送无限量的数据。由于您尝试消耗所有资源,因此可能会使您的应用程序(OutOfMemory)崩溃。

我假设您对okResponse具有一定的格式和长度, 因此您最好检查一下。


请确保您已阅读以Subhas链接的Luis Muñoz的答案,
Most Robust way of reading a file or stream using Java (to prevent DoS attacks)),
其中包含一些用于从流中读取内容的更多实现细节。


另一个问题可能是攻击仅使连接保持打开状态而不发送任何数据。我想应该在某个时候断开连接,否则线程可能会永远被阻塞。

编辑:
由于您的代码没有显式包含它,因此您还应该添加一个try ... finally ...块以确保正确关闭了资源。