4

我们正在使用 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>

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

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

谁能告诉我如何修复这个 XSS 漏洞?

谢谢!

4

2 回答 2

2

您需要转义Util.getProduct(request). 通常这是使用 JSTL 和<c:out>标签和 EL 完成的:

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

注意,您必须使用相当最新的 EL 实现(根据JSTL 或 JSP 2.0 EL for getter with argument and Parameters in EL methods)才能将参数传递给 getter 方法。


由于您问题中的代码包含脚本,我强烈建议您阅读如何避免 JSP 文件中的 Java 代码?这个问题涵盖了使用 JSTL+EL 而不是 scriptlet 的原因,以及关于这两个首字母缩略词实际指代的一些信息。

于 2011-11-10T02:22:21.650 回答
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." );
    }
}
于 2012-01-20T16:12:45.497 回答