JavaScript экранирование ненадежных данных для предотвращения XSS - PullRequest
1 голос
/ 14 марта 2020

Мне нужно избежать ненадежного пользовательского ввода, чтобы вставить данные в контекст содержимого элемента HTML, например, внутри элемента <td>.

OWAPS рекомендует экранировать определенные символы :

 & --> &amp;
 < --> &lt;
 > --> &gt;
 " --> &quot;
 ' --> &#x27;     
 / --> &#x2F;   

Я рассмотрел десятки различных рекомендаций, и ни одна из них не подходит для моего случая:

  • Экранирование на стороне сервера не является удобным вариантом, так как данные отправляется как большой JSON объект, где некоторые свойства могут быть двоичными данными. Также серверный API можно использовать для вставки данных в различные атрибуты HTML - HTML, параметр GET и т. Д. c. где могут потребоваться разные механизмы экранирования.
  • Javascript Escape (устарело), ​​encodeURI и encodeURIComponent предназначены для URI
  • node.textContent = untrustedDataString; будет работать, но это не удобно так как я строю комплекс HTML перед добавлением в DOM и мне нужно, чтобы он был проанализирован как HTML после , ненадежные данные были экранированы: myDiv.innerHTML = htmlString
  • Если я пишу функция для экранирования определенных символов , которая работает хорошо, но я бы подумал, что у обычной проблемы, подобной этой, было бы более стандартное решение - например, функция JavaScript. Изобретать собственные механизмы безопасности не считается лучшей практикой.

:

function escapeXml(unsafe) {
    return unsafe.replace(/[<>&'"]/g, function (c) {
        switch (c) {
            case '<': return '&lt;';
            case '>': return '&gt;';
            case '&': return '&amp;';
            case '\'': return '&apos;';
            case '"': return '&quot;';
        }
    });
}

Мне не хватает стандартного и общепринятого метода, о котором все остальные знают?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...