Java 如何将HttpServletRequest参数编码为给定格式?
我必须对Java 如何将HttpServletRequest参数编码为给定格式?,java,spring,encoding,filter,xss,Java,Spring,Encoding,Filter,Xss,我必须对HttpServletRequest参数进行编码,以避免XSS攻击 我正在尝试使用Spring提供的CharacterEncodingFilter 我在web.xml中有以下条目,但它似乎不起作用 <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEn
HttpServletRequest
参数进行编码,以避免XSS
攻击
我正在尝试使用Spring
提供的CharacterEncodingFilter
我在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>
编码滤波器
org.springframework.web.filter.CharacterEncodingFilter
编码
UTF-8
强制编码
真的
编码滤波器
/*
我已经问过其他问题了,但到目前为止运气不好
如果我从JSP页面为一个字段传递字符串,比如“>
,它不会对其进行编码,我可以通过获取单个参数然后对其进行编码来实现,但我需要的是对整个应用程序进行单点编码。有什么线索,我错在哪里?或者更好的解决方案
编辑:-
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);
}
}
Map params=httpRequest.getParameterMap();
迭代器i=params.keySet().Iterator();
映射结果=新的HashMap();
布尔有效=真;
while(i.hasNext()){
字符串键=(字符串)i.next();
字符串值=((字符串[])params.get(键))[0];
如果(!isValidInput(值)){
有效=错误;
结果.输入(键,“无效输入”);
logger.error(“在url”+httpRequest.getServletPath()+”中输入的键:“+key+”值:“+value”无效);
}
}
它是否不适用于POST
或GET
仅测试POST。看一看,它说字符编码过滤器设置正文编码,但不设置URI编码。
还看一看实际上我已经创建了一个公共过滤器XSSFilter(更新如上),它从请求和验证中获取参数,并在此过滤器之后将控制传输到Spring控制器。