SV.STRUTS.NOTVALID

如果一个类扩展了 org.apache.struts.action.ActionForm 并具有验证方法,但未验证某些字段,则将出现此错误。

漏洞与风险

对于 Web 应用程序,未经验证的字段是最大的安全问题。未经验证的字段可导致许多安全漏洞,如 SQL 注入、跨站点脚本等。

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

缓解与预防

定义验证方法并验证所有表单字段。例如,整型字段可按大小、负值度和非零值来检查。根据信息类型,字符串字段需要更复杂的检查。

示例 1

复制
 public class SV_STRUTS_NOTVALID_Sample_1 extends ActionForm {
     private String name;
     private String birthdayString;
     protected Date birthday;
     public ActionErrors validate(ActionMapping map,
                                  HttpServletRequest req) {
         ActionErrors errors = new ActionErrors();
         SimpleDateFormat dateConvertor = new SimpleDateFormat(
                 req.getParameter("date.format"));
         try {
             birthday = dateConvertor.parse(birthdayString);
         } catch (ParseException e) {
             errors.add(ActionErrors.GLOBAL_MESSAGE,
                        new ActionMessage("Bad date"));
         }
         return super.validate(map, req);
     }
     public String getName() {
         return name;
     }
     public void setName(String name) {
         this.name = name;
     }
     public String getBirthday() {
         return birthdayString;
     }
     public void setBirthday(String birthday) {
         this.birthdayString = birthday;
     }
 }

针对第 19 行的字段声明报告 SV.STRUTS.NOTVALID:Struts:表单字段 SV_STRUTS_NOTVALID_Sample_1 和 name 未使用 validate 方法进行验证。