我们碰巧使用IBM appscanhttp://www-01.ibm.com/software/awdtools/appscan/ http://www-01.ibm.com/software/awdtools/appscan/
针对我们的 java 代码库,它返回了大约 3000 个高严重性漏洞。
其中大多数恰好是系统信息泄漏,它认为当我们在 catch 块中打印堆栈跟踪时就会发生这种情况,但我们只打印发生的文件名和行号,使我们能够更好地调试代码。
还有一些是关于 SQL 注入、输入验证等。
但是,我的问题是关于资源耗尽(文件描述符、磁盘空间、套接字等),它列出了java.io.BufferedReader.readLine
作为可能的外部攻击的场所。
InputStream ins=conn.getInputStream();
String inputLine;
if (!preserveLinefeeds) {
BufferedReader in = new BufferedReader(new InputStreamReader(ins));
while ((inputLine = in.readLine()) != null)
pr.readThreadResponse+=inputLine;
in.close();
ins.close();
}
conn 是一个 HttpURLConnection 对象。
如何在代码中添加保护措施来防止这种情况发生?
如果 AppScan 指示与 readLine 相关的拒绝服务漏洞,则可能不是由于对无法关闭流的任何担忧(无论这可能有多重要),而是由于 readLine 的无限制性质。由于 readLine 会继续读取输入,直到读取换行符或 CR-LF 为止,因此如果输入源不可信,您可能会在没有预期 CR-LF 的情况下输入大量数据,从而导致内存耗尽情况。
要解决此问题,您可以确保(通过应用程序外部的机制)将输入大小限制在安全合理的范围内(尽管 AppScan、Fortify 和其他工具将继续抱怨 readLine),或者更好的是,您可以替换您的readLines 具有有界读取例程,该例程设置将读入缓冲区的字符数的绝对最大值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)