我有以下网址来调用我的应用程序: http://machine.domain.com:8383/eqube70/BuildNPlay 这很好用,它按照我的期望来调用index.jsp。
但是如果我的请求网址被更改为: http://machine.domain.com:8383/eqube70/BuildNPlay/?--%3E%3C/script%3E%3Cscript%3Ealert('你被黑了')%3C / script%3E 然后我得到警报,我无法让我的应用程序工作。
这是因为通过请求URI传递了一些请求参数。 为了删除这个我编写的requiest包装器来扫描param值。 如果param值包含诸如&lt ;,>之类的字符然后我分别用& lt,& gt替换它们。
如果我的请求参数值,现在这很好用。但是如果新传递的请求参数名称包含任何这些字符,那么我就会收到警报。
我想要一些方法来扫描请求参数名称并删除/修改或跳过带有恶意字符的参数名称。
我能做些什么来实现这个目标吗?
以下是我到目前为止编写的代码。
public class eQIndexServlet implements Filter
{
static class RequestWrapper extends HttpServletRequestWrapper
{
char[] ESCAPECHARS = { '&', '<', '>'};
public RequestWrapper(ServletRequest request)
{
super((HttpServletRequest)request);
}
public String getParameter(String paramName)
{
//if(paramName.contains(ESCAPECHARS))
String value = super.getParameter(paramName);
value = eQUtil.escapeHtmlCharArray(value, ESCAPECHARS);
return value;
}
public String[] getParameterValues(String paramName)
{
String values[] = super.getParameterValues(paramName);
for(int i=0; i<values.length; i++)
{
values[i] = eQUtil.escapeHtmlCharArray(values[i], ESCAPECHARS);
}
return values;
}
}
答案 0 :(得分:0)
在getparameter方法中添加以下代码后,它可以工作
if(paramName.contains(&#34;&gt;&#34;)|| paramName.contains(&#34;&lt;&#34;)) return null;
似乎如果value为null,则chain.doFilter会忽略该参数。