1

我使用过滤器来修复 XSS。但是当我使用 fortify 软件扫描我的代码时,XSS 问题的数量并没有改变。我错过了什么?或 Fortify 无法识别过滤器?这是我的过滤器代码:

public final class RequestWrapper extends HttpServletRequestWrapper {

public RequestWrapper(HttpServletRequest servletRequest) {
    super(servletRequest);
}

public String[] getParameterValues(String parameter) {

  String[] values = super.getParameterValues(parameter);
  if (values==null)  {
              return null;
      }
  int count = values.length;
  String[] encodedValues = new String[count];
  for (int i = 0; i < count; i++) {
             encodedValues[i] = cleanXSS(values[i]);
   }
  return encodedValues;
}

public String getParameter(String parameter) {
      String value = super.getParameter(parameter);
      if (value == null) {
             return null;
              }
      return cleanXSS(value);
}

public String getHeader(String name) {
    String value = super.getHeader(name);
    if (value == null)
        return null;
    return cleanXSS(value);

}

private String cleanXSS(String value) {
    System.out.println("filter  : " + value);
    //System.out.println("afterfilter  : " + (isNotEmptyOrNull(value) ? StringEscapeUtils.escapeHtml4(value) : value));
    //return isNotEmptyOrNull(value) ? StringEscapeUtils.escapeHtml4(value) : value; 
    if(isNotEmptyOrNull(value)){
        value = value.replaceAll("<", "&lt;").replaceAll(">", "&gt;");
        value = value.replaceAll("\\(", "&#40;").replaceAll("\\)", "&#41;");
        value = value.replaceAll("'", "&#39;");
        value = value.replaceAll("eval\\((.*)\\)", "");
        value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");
        value = value.replaceAll("script", "");
    }
    System.out.println("afterfilter  : " +value);
    return value;
}
public static boolean isNotEmptyOrNull(String string) {
    if (string != null && !"".equals(string.trim())) {
        return true;
    }
    return false;
}

}

4

1 回答 1

1

这里的问题是 Fortify 没有适用于您的cleanXSS方法的规则。您需要做的是编写自定义规则,特别是“数据流清理规则”。这将使 fortify 知道任何进入然后从该方法返回的数据都不会受到 XSS 攻击。

但是,在查看了您的 XSS 过滤器之后,我必须通知您它是不完整的,并且不会考虑所有可能的 XSS 向量。我推荐你使用 OWASP ESAPI 的 XSS 过滤器。Fortify 已经为 ESAPI 制定了规则。

于 2014-07-14T20:53:53.323 回答