防止java中的跨站点脚本

时间:2011-10-04 18:00:00

标签: java jsp xss

我必须维护一个旧的Web项目并进行一些开发。我用fortify工具扫描它,发现很多关于跨站点脚本的缺陷。 Project包含很多jsps和servlet。由于jsp文件的数量,在每个字段中进行验证几乎是不可能的。什么是在旧项目中阻止xss的最简单方法。

提前致谢。

2 个答案:

答案 0 :(得分:0)

这里没有简单的答案。您可以(正如Sridhar所提到的那样)覆盖getParameter并在那里进行编码,这将提供大量的覆盖,但它是错误的编码位置 - 当您知道使用值的位置时,应该进行编码。这将解决一些安全问题,但会在不合适的区域(DB,Javascript ...)以及值的双重编码中导致HTML编码。

正确答案是通过Fortify结果并对污染输出发送到HTML,javascript的区域进行编码....查看编码器的OWASP。

答案 1 :(得分:-1)

你可以创建一个扩展HttpServletRequestWrapper的CustomRequestWrapper类,你可以在其中覆盖getParameter,getParameterValues等方法

执行HTML实体编码/转义以防止XSS ..

只需添加一个过滤器即可将所有请求路由到CustomRequestWrapper。这样他们就会点击你的Xss预防代码。

将过滤器xml添加到Web.xml

并在customRequestWrapper中执行以下操作,

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    throws IOException, ServletException {
    chain.doFilter(new CustomRequestWrapper((HttpServletRequest) request), response);
}