EN JP CN

SV.STRUTS.STATIC

SV.STRUTS.STATIC

このエラーは、クラスが org.apache.struts.action.ActionForm を拡張し、final でない static フィードを定義する場合に報告されます。

脆弱性とリスク

final ではない static フィールドは、異なるインスタンスによって同時またはチェック時と使用時の間 (TOCTOU) に変更される可能性があるため、競合状態を生じる可能性があります。

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

軽減と防止

final ではない static フィールドの使用は避けます。フィールドを final または non-static にします。フィールドを final にする場合、そのフィールドを含むオブジェクトが immutable オブジェクトであることを確認します。このフィールドの値が要求に依存する場合、悪意のあるフォームが作成され、何らかの脅威にさらされる可能性があるため、このフィールドは static でないようにすることが必要です。このフィールドが要求に依存しない場合には、このフィールドを final にする必要があります。

例 1

18 public class SV_STRUTS_STATIC_Sample_1 extends ActionForm {
19 
20     private String birthdayString;
21     protected Date birthday;
22     private static SimpleDateFormat dateConvertor;
23     public ActionErrors validate(ActionMapping map,
24                                  HttpServletRequest req) {
25         ActionErrors errors = new ActionErrors();
26         if (dateConvertor == null) {
27             dateConvertor = new SimpleDateFormat(req
28                     .getParameter("date.format"));
29         }
30         try {
31             birthday = dateConvertor.parse(birthdayString);
32         } catch (ParseException e) {
33             errors.add(ActionErrors.GLOBAL_MESSAGE,
34                        new ActionMessage("Bad date"));
35         }
36         return super.validate(map, req);
37     }
38     public String getBirthday() {
39         return birthdayString;
40     }
41     public void setBirthday(String birthday) {
42         this.birthdayString = birthday;
43     }
44 }

SV.STRUTS.STATIC が 22 行目のフィールド宣言に対して報告されています。Struts:Static フォームフィールド変数 dateConvertor は final である必要があります。