我可以在servlet请求中跳过一些请求参数吗?

时间:2014-03-18 06:34:21

标签: java jsp servlets servlet-filters

我有以下网址来调用我的应用程序:     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;
    }
}

1 个答案:

答案 0 :(得分:0)

在getparameter方法中添加以下代码后,它可以工作

if(paramName.contains(&#34;&gt;&#34;)|| paramName.contains(&#34;&lt;&#34;))    return null;

似乎如果value为null,则chain.doFilter会忽略该参数。