Каким будет лучший способ передать данные из экспресс-бэкэнда клиенту (JavaScript), чтобы можно было отображать данные в DOM, используя какой-то вид рендеринга на стороне клиента, при этом разрешая очищенный белый список HTML и по-прежнему предотвращая XSS?
Скажем, например, метод рендеринга ответа узла выглядит так:
res.render('index', {
data : {
foo: '<a href="myhomepage">foo</p>'
}
});
И по какой-то причине в него входят неэкранированные символы. Обычно включение его в шаблон html / ejs было бы тривиальным, например:
<script>
myVar = JSON.parse('<%- JSON.stringify(data) %>');
</script>
Но он подавляется первой двойной кавычкой тега привязки: Unexpected token h in JSON at position 18
Мы определенно хотим разрешить строки с символами HTML (полужирным шрифтом, якорными ссылками и т. Д.), Но хотим удалить теги сценария и другие подобные опасные теги.
Есть ли простой способ добиться этого? Или нужно будет пройти все уровни данных, передаваемых методу рендеринга, и запустить все строковые ключи через какой-то движок дезинфицирующего средства XSS?