EN JP CN

SV.UMC.THREADS

SV.UMC.THREADS

この警告は、アプリケーションがスレッドを使用している場合に報告されます。

脆弱性とリスク

多くの場合、スレッドの管理は避けるべきです。たとえば、EJB 標準には、「Enterprise Bean は、スレッドの管理を試みてはなりません。「Enterprise Bean は、スレッドの管理を試みてはなりません。Enterprise Bean は、スレッドの開始、停止、一時停止、再開、スレッドの優先順位や名前の変更を試みてはなりません。Enterprise Bean は、スレッドグループの管理を試みてはなりません。というガイドラインが含まれています。また、サーブレットにおけるスレッド管理もきわめて問題が多く、問題を引き起こすことがあります。一方、スレッドはアプレットやその他の GUI アプリケーションでも使用されています。このような状況においては、1 つの警告が 1 つのエラーを報告するだけではなく、このコードに対してさらに注意を払う必要があるというプログラマーへの注意喚起の役目を果たします。

Klocwork セキュリティ脆弱性 (SV) チェッカーは、潜在的に危険なデータを生成する呼び出しを特定します。このような呼び出しは安全でないソースと考えられます。ユーザーは攻撃者になる可能性があり、ヒューマンエラーを取り込む可能性があるため、安全でないソースはユーザーが指定した任意のデータである可能性があります。

軽減と防止

EJB の場合、スレッドを使用せずに、フレームワークを使用して並列実行を行います。

例 1

23 public class SV_UMC_THREADS_Sample_1 extends HttpServlet {
24     public void doPost(HttpServletRequest request,
25                        HttpServletResponse response) throws IOException,
26                                                             ServletException {
27         doProcessRequest(request, response);
28     }
29     public void doGet(HttpServletRequest request,
30                       HttpServletResponse response) throws IOException,
31                                                            ServletException {
32         doProcessRequest(request, response);
33     }
34     private void doProcessRequest(HttpServletRequest request,
35                                   HttpServletResponse response) throws IOException,
36                                                                        ServletException {
37         final StringBuffer buffer = new StringBuffer();
38         Runnable r = new Runnable() {
39             public void run() {
40                 buffer.append("Processing...\n");
41                 // do something
42                 buffer.append("Finished.\n");
43             }
44         };
45         Thread t = new Thread(r);
46         t.start();
47         // do something else, then get results from background thread
48         try {
49             t.join();
50         } catch (InterruptedException e) {
51         }
52         String log = buffer.toString();
53         // create page...
54     }
55 }

SV.UMC.THREADS が 36 行目の 'Thread' コンストラクタの呼び出しに対して報告されています。'Thread' メソッドが使用されています。EJB などの多くの場合では、スレッドの管理は廃止されています。また、スレッドの管理は、常に多くのエラーを生じます。 SV.UMC.THREADS が 37 行目の呼び出しに対して報告されています。'start' メソッドが使用されています。EJB などの多くの場合では、スレッドの管理は廃止されています。また、スレッドの管理は、常に多くのエラーを生じます。 SV.UMC.THREADS が 40 行目の呼び出しに対して報告されています。'join' メソッドが使用されています。EJB などの多くの場合では、スレッドの管理は廃止されています。また、スレッドの管理は、常に多くのエラーを生じます。