SV.UMC.EXIT

应用程序不得调用 System.exit() 或 Runtime.exit()。即使代码为“死”代码或没有权限关闭 Java 虚拟机的代码,则该代码也可能残留调试代码或来自非 J2EE 应用程序的代码。

漏洞与风险

System.exit() 和 Runtime.exit() 可以关闭 Java 虚拟机。这可能导致拒绝服务攻击。

Klocwork 安全漏洞 (SV) 检查器可识别可能创建危险数据的调用;这些调用被视为不安全的来源。用户所提供的任何数据都可能是不安全的来源,因为用户可能是攻击者,或者可能引入人为错误。

缓解与预防

应移除对 System.exit() 和 Runtime.exit() 的调用。应实施相应的错误处理。

示例 1

复制
     public void doPost(HttpServletRequest request,
                        HttpServletResponse response) throws IOException,
                                                             ServletException {
         doProcessRequest(request, response);
     }
     public void doGet(HttpServletRequest request,
                       HttpServletResponse response) throws IOException,
                                                            ServletException {
         doProcessRequest(request, response);
     }
     // called from servlet
     private void doProcessRequest(HttpServletRequest request,
                                   HttpServletResponse response) throws IOException,
                                                                        ServletException {
         if ("shutdown".equals(request.getParameter("action"))) {
             System.exit(1);
         }
         doCreatePage(request, response);
         // ...
     }

针对第 31 行的调用报告 SV.UMC.EXIT:java.lang.System.exit() 方法调用不应该用于 servlet 代码