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>

NB getter メソッドに引数を渡すには、かなり最新の EL 実装を使用する必要があります ( JSTL または JSP 2.0 EL のように、getter with argumentおよびParameters in EL Methods )。


質問のコードにはスクリプトレットが含まれているため、 How to avoid Java code in JSP files?を読むことを強くお勧めします。この質問は、スクリプトレットの代わりに JSTL+EL を使用する理由と、これら 2 つの頭字語が実際に何を指しているのかについての情報をカバーしています。

于 2011-11-10T02:22:21.650 に答える
1

この Web サイトの 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 に答える