2015-01-29 2 views
1

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

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.

Fortify говорит:

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

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

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

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

EDIT

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

+0

@GeorgeStocker processResponse существует на стороне клиента. Это функция javascript, содержащая строку кода, включенную в вопрос. – Josh

+0

@GeorgeStocker Это просто функция обертки для обратного вызова успеха AJAX. – Josh

+0

Возможно, вы захотите включить это в код, чтобы дать более четкое представление о том, что мы видим. –

ответ

-2

Уязвимые:

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

+0

Я думаю, что код от ESAPI4JS, не так ли? У меня нет доступа к этой библиотеке. – Josh

+0

Я не читал, что это «document.location»; в этом есть смысл. –

+0

@JOsh Если эта библиотека имеет правильную лицензию (например, MIT), вы можете потенциально включить источник в встроенное приложение. –

Смежные вопросы