如何修复XSS漏洞

时间:2011-11-10 02:18:05

标签: java jsp fortify

我们正在使用fortify扫描java源代码&它抱怨下面的错误:

Method abc() sends unvalidated data to a web browser on line 200, which can result in the browser executing malicious code.

我们在第200行下面的代码:

<a href="<%= Util.getProduct(request) %>">Product</a>

和Util.java下面的getProduct方法中的代码:

String prod = request.getParameter("prod");

任何人都可以告诉我如何修复此XSS漏洞吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

您需要转义Util.getProduct(request)的输出。通常,这是使用JSTL和<c:out>标记以及EL:

完成的
<a href="<c:out value="${Util.getProduct(request)}"/>" class="left_nav_link">Product</a>

NB 您必须使用相当最新的EL实现(根据JSTL or JSP 2.0 EL for getter with argumentParameters in EL methods)才能将参数传递给getter方法。


由于您问题中的代码包含scriptlet,我将 强烈 建议您阅读How to avoid Java code in JSP files?此问题包含使用JSTL + EL而不是scriptlet的原因,以及关于这两个缩略词实际所指的内容的一些信息。

答案 1 :(得分:1)

如果您没有此网站的JSTL,您可以通过确保只打印有效产品来解决问题:

public String getProduct( String prod ) throws InputValidationException {
    if (   prod.equals( "myProduct1" )
        || prod.equals( "myProduct2" )
        || prod.equals( "myProduct3" )
        // etc.           
    ) {
        return "/foo/page.jsp?product=" + safeProduct;
    }
    else {
        throw new InputValidationException( "Invalid product key provided." );
    }
}