На странице разметки, как я могу добавить что-то в свойство textContent тега html?

Я заметил уязвимость XSS, над которой я работаю, чтобы решить, где jqxGrid будет отображать любую ячейку. Например: <a href="javascript:alert('test');">Hello</a>. Поэтому моей мыслью было найти способ решить эту проблему. В настоящее время я перебираю данные для того, что нужно отображать, и есть функция рендеринга и функции cellrenderer, которую вы можете передать. Мой вопрос: как вернуть строку HTML, чтобы в ячейке отображался текст, указанный в аргументе 6.

У меня есть собственные сценарии очистки и сценарии удаления, которые я могу применить, но я подумал, что могу добавить значение в свойство textContent элемента HTML. Возможно ли это сделать?

Могу ли я сделать что-то вроде:

return "<div text-content='VALUE'></div>";

вместо:

return "<div>" + value + " </div>";

Есть ли версия JQXGrid для Angular6+, которую мы могли бы использовать, которая выиграет от политик угловых инъекций?

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

Предположение: сервер проверяет это, и клиент делает то же самое. Тем не менее, я знаю, что мы все равно получим недействительный HTML как таковой. При этом предположим, что приведенное выше значение действительно содержит вредоносный код html/javascript.


person Fallenreaper    schedule 16.11.2018    source источник
comment
Существует множество альтернатив, которые вы можете использовать (primeng, material и т. д.), но StackOverflow — не место для рекомендаций библиотек.   -  person user184994    schedule 16.11.2018
comment
Я здесь не для того, чтобы получить библиотеку. Я хотел знать, есть ли в JQXGrid способ дезинфицировать, или если через HTML применить текстовую строку, которую я хочу отображать через узел nodes textContent, вместо узла HTML, который отображает.   -  person Fallenreaper    schedule 16.11.2018
comment
Вы можете использовать DomSanitizer для очистки HTML-кода.   -  person user184994    schedule 16.11.2018
comment
@ user184994 Я знаю о DomSanitizer, но это для обхода правил безопасности Angular. Хотя я только что рассмотрел метод sanitize, который МОЖЕТ быть допустимым вариантом, тем более что сейчас я работаю над разработкой Angular Component. Мне придется прочитать конкретные примеры команды sanitize.   -  person Fallenreaper    schedule 16.11.2018


Ответы (1)


Если вы хотите показать результат, вы можете использовать тег xmp.

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/xmp

div {
  font-family: sans-serif;
}
<div>
  <p>This is some HTML</p>
</div>
<xmp>
  <p>This is some HTML</p>
</xmp>

Вы также можете добавить недезинфицированный HMTL к элементу и получить обратно textContent или innerText, а затем добавить его на свою страницу.

let html = "<ol><li>This is some HTML</li><li>And some more</li></ol>";

let unsanitized = document.querySelector('#unsanitized');
let sanitized = document.querySelector('#sanitized');

let tempEl = document.createElement('div');
tempEl.innerHTML = html;

unsanitized.innerHTML = html;
sanitized.innerHTML = tempEl.textContent;
<div id="unsanitized"></div>
<div id="sanitized"></div>

person Will    schedule 16.11.2018
comment
Из-за устаревшего характера xml я, вероятно, захочу использовать вместо него <pre>. Я не хотел использовать javascript так сильно, как просто делать это в чистой разметке. Я посмотрю на тег pre, который может делать то, что я хочу. При попытке сделать: <pre><a href="#">test</a></pre> получилось не так, как я ожидал. Я продолжу искать другие демо - person Fallenreaper; 16.11.2018