我必须对HttpServletRequest
参数进行编码,以避免XSS
攻击。
我正在尝试使用CharacterEncodingFilter
提供的Spring
。
我在web.xml
下面有条目,但它似乎没有效果。
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
已经经历了其他问题,但到目前为止还没有运气。
如果我为JSP页面中的字段传递"><img src=x onerror=prompt(1);>
之类的字符串,它不对其进行编码,我可以通过获取单个参数然后对其进行编码来实现,但我需要的是整点的单点编码应用。任何线索,我错了?或任何更好的解决方案。
编辑: -
XSSFilter代码: -
Map params = httpRequest.getParameterMap();
Iterator i = params.keySet().iterator();
Map result = new HashMap<String, String>();
boolean valid = true;
while (i.hasNext()) {
String key = (String) i.next();
String value = ((String[]) params.get(key))[0];
if (!isValidInput(value)) {
valid = false;
result.put(key, "Invalid Input");
logger.error("Invalid input in url " + httpRequest.getServletPath() + " for key : " + key + " value :" + value);
}
}