如何防范资源耗尽和其他漏洞?

roy*_*g86 3 java resources exploit

我们碰巧使用IBM 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();
      } 
Run Code Online (Sandbox Code Playgroud)

conn是一个HttpURLConnection对象.

如何在代码中添加safegaurds来防止这种情况?

Mar*_*Gee 6

如果AppScan指示与readLine关联的拒绝服务漏洞,则可能不是由于对关闭流失败的任何担忧(无论这可能是多么重要),而是由于readLine的无限性质.由于readLine继续读取输入,直到读取换行符或CR-LF,如果输入源不可信,则可能会在没有预期CR-LF的情况下输入非常大量的数据,从而导致内存耗尽情况.

要解决这个问题,您可以确保(通过应用程序外部的机制)输入大小限制为安全合理(尽管AppScan,Fortify和其他工具将继续抱怨readLine),或者更好的是,您可以替换readLines具有有界读取例程,该例程设置将被读入缓冲区的字符数的绝对最大值.