EN JP CN

SV.STRUTS.NOTVALID

SV.STRUTS.NOTVALID

このエラーは、クラスが org.apache.struts.action.ActionForm を拡張し、validate メソッドを持つにもかかわらず、一部のフィールドが検証されていない場合に発生します。

脆弱性とリスク

未検証のフィールドは、Web アプリケーションにとって最大のセキュリティ問題です。未検証のフィールドは、SQL インジェクション、クロスサイトスクリプティングなど、さまざまなセキュリティ脆弱性を引き起こす可能性があります。

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

軽減と防止

validate メソッドを定義し、すべてのフォームフィールドを検証します。整数フィールドは、サイズ、ネガティブ性、ゼロでないことなどについてチェックします。文字列フィールドについては、情報のタイプに基づき、さらに複雑なチェックが必要です。

例 1

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

SV.STRUTS.NOTVALID が 19 行目のフィールド宣言に対して報告されています。Struts:フォームフィールド 'SV_STRUTS_NOTVALID_Sample_1' 'name' が 'validate'メソッドで検証されていません。