Экранируйте вывод
Объяснение в один абзац
HTML и другие веб-языки смешивают контент с исполняемым кодом - один абзац HTML может содержать визуальное представление данных вместе с инструкциями по выполнению JavaScript. При рендеринге HTML или возврате данных из API то, что мы считаем чистым контентом, может фактически содержать код JavaScript, который будет интерпретироваться и выполняться браузером. Это происходит, например, когда мы визуализируем контент, вставленный злоумышленником, в базу данных - например, <div><script>//malicious code</script></div>
. Это может быть смягчено путем указания браузеру обрабатывать любой кусок ненадежных данных только как контент и н икогда не интерпретировать его - этот метод называется экранированием. Многие библиотеки npm и движки шаблонов HTML предоставляют возможности экранирования (пример: escape-html, node-esapi). Не только HTML-контент должен быть экранирован, но также CSS и JavaScript
Пример кода - не помещайте ненадежные данные в ваш HTML
<script>...NEVER PUT UNTRUSTED DATA HERE...</script> directly in a script
<!--...NEVER PUT UNTRUSTED DATA HERE...--> inside an HTML comment
<div ...NEVER PUT UNTRUSTED DATA HERE...=test /> in an attribute name
<NEVER PUT UNTRUSTED DATA HERE... href="/test" /> in a tag name
<style>...NEVER PUT UNTRUSTED DATA HERE...</style> directly in CSS