SV.UMC.THREADS

当应用程序使用线程时会报告该警告。

漏洞与风险

在许多情况下都应该避免线程管理。例如,EJB 标准包含以下指导原则:企业 bean 不得尝试管理线程。企业 bean 不得尝试启动、停止、暂停或恢复线程,也不得更改线程的优先级或名称。企业 bean 不得尝试管理线程组。伺服程式中的线程管理也非常值得怀疑,并且可能导致出现问题。另一方面,线程也用于小型应用程序和其他 GUI 应用程序。在此上下文中,警告并不是为了报告错误,而是作为一种提醒,让编程人员更加关注该代码。

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

缓解与预防

针对 EJB 使用框架方法来实现并行执行,而非使用线程。

示例 1

复制
 public class SV_UMC_THREADS_Sample_1 extends HttpServlet {
     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);
     }
     private void doProcessRequest(HttpServletRequest request,
                                   HttpServletResponse response) throws IOException,
                                                                        ServletException {
         final StringBuffer buffer = new StringBuffer();
         Runnable r = new Runnable() {
             public void run() {
                 buffer.append("Processing...\n");
                 // do something
                 buffer.append("Finished.\n");
             }
         };
         Thread t = new Thread(r);
         t.start();
         // do something else, then get results from background thread
         try {
             t.join();
         } catch (InterruptedException e) {
         }
         String log = buffer.toString();
         // create page...
     }
 }

针对第 36 行调用 Thread 构造函数的行为报告 SV.UMC.THREADS:使用了方法“Thread”。在许多情况下,都弃用了线程管理(比如在 EJB 中)。而且它总是很容易出错。针对第 37 行的调用报告 SV.UMC.THREADS:使用了方法“start”。在许多情况下,都弃用了线程管理(比如在 EJB 中)。而且它总是很容易出错。针对第 40 行的调用报告 SV.UMC.THREADS:使用了方法“join”。在许多情况下,都弃用了线程管理(比如在 EJB 中)。而且,它总是很容易出错

安全培训

应用程序安全培训材料由 Secure Code Warrior 提供。