Как использовать ESAPI для разрешения JavaScript DOM XSS?

Мы используем HP fortify Audit Workbench 3.80 для оценки уязвимостей в наших приложениях. Fortify помечает следующий код JavaScript ExtJ как критическую («наихудшую») XSS-уязвимость DOM:

function doAjaxCall(param1, param2, div) {
    var options = {
            url : url,
            params : {
                param1 : param1,
                param2 : param2
            },
            method: 'GET',
            success: function(response, options) {
                processResponse(response, div);
            },
            failure: function(response, options) {
                doSomethingElse();
            }
    };
    Ext.Ajax.request(options);
}


function processResponse(response, div) {
     // SECURITY ISSUE HERE
     document.getElementById(div).innerHTML = '<br>' +
            'An error occurred with status code ' 
             + response.status + 
             '<br><br>';  
}

response — это ответ, возвращаемый запросом AJAX.

Укрепить говорит:

метод «processResponse» отправляет непроверенные данные в веб-браузер в строке 100, что может привести к выполнению браузером вредоносного кода.

Я понимаю проблему и почему это проблема. Чего я не знаю, так это как очистить ввод с помощью ESAPI. Мы успешно используем ESAPI для решения проблем в нашем коде Java, но я не уверен, что смогу решить эту конкретную проблему в JavaScript.

Я нашел эту библиотеку JavaScript ESAPI, ESAPI4JS, но я работаю в среде с чрезвычайно высоким уровнем безопасности. , и у меня вообще нет доступа к этой библиотеке.

Как я могу использовать ESAPI для очистки ответа?

ИЗМЕНИТЬ

Добавлен полный код запроса ajax для каждого запроса пользователя.


person Josh    schedule 29.01.2015    source источник
comment
@GeorgeStocker processResponse существует на стороне клиента. Это функция javascript, содержащая строку кода, которую я включил в вопрос.   -  person Josh    schedule 29.01.2015
comment
@GeorgeStocker Это просто функция-оболочка для обратного вызова успеха AJAX.   -  person Josh    schedule 29.01.2015
comment
Вы можете включить это в сам код, чтобы дать более четкое представление о том, что мы видим.   -  person George Stocker    schedule 29.01.2015
comment
@GeorgeStocker Это действительно просто обертка. Я все равно добавил код.   -  person Josh    schedule 29.01.2015


Ответы (1)


Уязвимый:

document.write("Site is at: " + document.location + ".");

Неуязвимо: org.owasp.esapi.ESAPI.initialize(); document.write($ESAPI.encoder().encodeForHTML("Сайт находится по адресу: "+document.location));

Вам нужно будет инициализировать его перед использованием. На сайте owasp есть документация.

@GeorgeStocker ошибается. Xss на основе dom обычно наиболее опасен, потому что он не может быть обработан на стороне сервера. Прекрасным примером может служить приведенное выше, которое можно легко использовать, используя # перед некоторым кодом.

Также большинство клиентских фильтров xss можно обойти с помощью onerror.

ey3

person ey3    schedule 29.01.2015
comment
Я думаю, что это код от ESAPI4JS, не так ли? У меня нет доступа к этой библиотеке. - person Josh; 29.01.2015
comment
Я не читал, что это «document.location»; в этом есть смысл. - person George Stocker; 29.01.2015
comment
@JOsh Если у этой библиотеки есть правильная лицензия (например, MIT), вы потенциально можете включить источник в свое приложение. - person George Stocker; 29.01.2015