SV.STRUTS.STATIC
如果一个类扩展了 org.apache.struts.action.ActionForm 并且定义了非最终的静态字段,将报告此错误。
漏洞与风险
非最终的静态字段可能创建争用条件,因为可同时或在检查和使用之间的时间 (TOCTOU) 由表单的不同实例进行更改。
Klocwork 安全漏洞 (SV) 检查器可识别可能创建危险数据的调用;这些调用被视为不安全的来源。用户所提供的任何数据都可能是不安全的来源,因为用户可能是攻击者,或者可能引入人为错误。
缓解与预防
避免使用非最终的静态字段。将字段设置为最终或非静态字段。如果要将一个字段设置为最终字段,确保其包含的对象不可变。如果此字段的值取决于某个请求,则该字段不应为静态,因为可能通过创建恶意表单产生暴露问题。如果字段不取决于请求,应将该字段设置为最终字段。
示例 1
复制
public class SV_STRUTS_STATIC_Sample_1 extends ActionForm {
private String birthdayString;
protected Date birthday;
private static SimpleDateFormat dateConvertor;
public ActionErrors validate(ActionMapping map,
HttpServletRequest req) {
ActionErrors errors = new ActionErrors();
if (dateConvertor == null) {
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 getBirthday() {
return birthdayString;
}
public void setBirthday(String birthday) {
this.birthdayString = birthday;
}
}
针对第 22 行的字段声明报告 SV.STRUTS.STATIC:Struts:静态表单字段变量“dateConvertor”应为最终字段