如何将HttpServletRequest参数编码为给定格式?

时间:2015-01-28 10:47:54

标签: java spring encoding filter xss

我必须对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);

            }
        }

0 个答案:

没有答案