【问题标题】:How to fix this possibility of denial of service issue?如何解决这种拒绝服务问题的可能性?
【发布时间】:2019-11-21 02:12:57
【问题描述】:

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

在 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();

同样的补救措施 -

验证用户输入以确保它不会导致不当 资源利用率。

但是,尚不清楚究竟可以验证什么。有什么指点吗?

【问题讨论】:

标签: java spring-boot http security


【解决方案1】:

理论上,攻击者可以通过 httpConnection 向您发送无限量的数据。由于您尝试使用所有这些,它可能会导致您的应用程序崩溃(OutOfMemory)。

我假设您对okResponse 有一定的格式和长度, 所以你最好检查一下。


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


另一个问题可能是攻击只是保持连接打开而不发送任何数据。我假设应该有一个超时来切断连接,否则线程可能会被永远阻塞。

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

【讨论】:

    猜你喜欢
    • 2021-03-16
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    相关资源
    最近更新 更多