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