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 方法进行验证。