Как исправить уязвимости XSS - PullRequest
4 голосов
/ 10 ноября 2011

Мы используем 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 hsa ниже код в методе getProduct:

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

Может кто-нибудь сказать мне, как исправить эту уязвимость XSS?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 10 ноября 2011

Вам нужно экранировать вывод Util.getProduct(request).Обычно это делается с использованием JSTL и тега <c:out> и EL:

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

NB , вам придется использовать довольно современную реализацию EL (согласно JSTL или JSP 2.0 EL для геттера с аргументом и Параметры в методах EL ) для передачи аргумента методу получения.


Поскольку кодв вашем вопросе содержатся скриптлеты, я настоятельно предложу вам прочитать Как избежать использования Java-кода в файлах JSP? В этом вопросе рассматриваются причины использования вместо JSTL + ELскриплетов, а также немного информации о том, что на самом деле означают эти две аббревиатуры.

1 голос
/ 20 января 2012

Если у вас нет 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." );
    }
}
...