Должен ли я использовать encodeForJavascript только для нежелательных данных в виде обычного текста или для нежелательных данных, содержащихся в переменной js - PullRequest
0 голосов
/ 18 октября 2018

Недавно наш проект обнаружил уязвимости XSS-атак на основе DOM.Я занимался исследованиями и разработками, используя доступную документацию, т.е. 1. https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet 2. https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet Я пытаюсь использовать ESAPI для исправления приведенной ниже строки кода

for(var i = 0; i < listOfLinks.length; i++) {
$("#listOfLinks").append('<li><a href="' + $("#baseUrl").val() + listOfLinks[i].URL + '" onclick="linkClicked(\'' + listOfLinks[i].URL + '\',\'' + listOfLinks[i].DisplayName + '\', event)">' + listOfLinks[i].DisplayName + '</a></li>');
}

Итак, новый кодкак показано ниже

for(var i = 0; i < listOfLinks.length; i++) {
var li = document.createElement('li');
var a = document.createElement('a');
var url = $("#baseUrl").val() + listOfLinks[i].URL;
a.setAttribute("href", $ESAPI.encoder().encodeForJavaScript($ESAPI.encoder().encodeForURL(url)));
a.onclick = linkClicked.bind(this, listOfLinks[i].URL, listOfLinks[i].DisplayName]);
a.innerText = listOfLinks[i].DisplayName;
li.appendChild(a);
$("#recentlyUsedModules").append(li);
}

Идея этого решения заключается в том, что любые манипуляции с HTML должны выполняться с использованием функций js, таких как createElement, setAttribute и т. д.

При использовании a я сталкиваюсь с проблемой.setAttribute ("href"), что если мой URL-адрес "\ link-name", то пользователь перенаправляется в / x2Flink / x2Dname, таким образом выбрасывая страницу не найдена.Проблема здесь в том, что кодировка javascript не меняется на противоположную.

Итак, мой вопрос, неправильно ли я использую ESAPI здесь.Я ясно вижу, что правило № 5 в https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet гласит, что при установке href с использованием setAttribute нам необходимо кодировать Url, а затем кодировать JS.Почему кодировка javascript не переворачивается анализатором JS?

...