Рендеринг закодированных символов HTML - PullRequest
0 голосов
/ 06 марта 2019

Возможно, это нечетный запрос,

Как часть компонента JavaScript на странице, я отображаю заголовки нескольких постов в блоге, взятых из WordPress. Сайт WP поддерживается маркетинговой командой. Иногда они используют символы в заголовке, которые хорошо отображаются на сайте WP, но в процессе очистки кодируются (& 'и - в частности). Хотя данные поступают из надежного источника, нам необходимо поддерживать некоторую форму кодирования, чтобы помочь предотвратить XSS, однако мы также хотели бы, чтобы эти символы отображались правильно. Функция JavaScript decodeURIComponent () прекрасно отображает символы, но, к сожалению, оставляет нас открытыми с точки зрения безопасности.

Кто-нибудь сталкивался с подобной проблемой раньше? Будем весьма благодарны за любые предложения относительно библиотек или подходов, чтобы обойти это.

Пример вида ввода, с которым нам нужно работать, выглядит следующим образом:

NN – Web – Site – Test Article & stuff ’ & –

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Не видя реального примера кода, невозможно подтвердить ваши проблемы безопасности и ошибки рендеринга.

Как я уже говорил в комментарии выше, это распространенная проблема.Лично я считаю, что вопрос также должен быть закрыт, но вот пример возможного исправления.

Удалите строку уязвимости XSS, проблем нет.

var out = null;
function garbage(e) {
  if (out) {
    out.textContent = this.value;
  }
}
window.onload = function() {
  out = document.getElementById("out");
  var d = document.getElementById("in");
  if (d) {
    d.addEventListener("keyup",garbage,false);
  }
}
Garbage in:<br />
<input id="in" type="text" />
<p>
Garbage out:<br />
<div id="out"></div>
0 голосов
/ 06 марта 2019

Обращаясь к ответу в этом сообщении , вы можете спокойно интерпретировать текст, используя DOMParser.

Образцы кода исходного ответа (в случае разрыва ссылки):

var encodedStr = 'hello &amp; world';

var parser = new DOMParser;
var dom = parser.parseFromString(
   '<!doctype html><body>' + encodedStr,
   'text/html');
var decodedString = dom.body.textContent;

console.log(decodedString);

Также в связанном посте указано, что JavaScript не включен в DomParser, поэтому не будет риска внедрения кода на ваш сайт.

...