Если я собираюсь отображать пользовательский ввод на моем сайте, достаточно ли безопасно просто отобразить его, выполнив Element.innerText = "user input" в javascript, или мне нужно дополнительно отфильтровать ввод, чтобы предотвратить XSS?
Element.innerText = "user input"
Внутренний текст предотвращает XSS?
Не во всех случаях! следующий отрывок взят из OWASP Foundation в отношении небезопасного использования innerText:
innerText
Одним примером атрибута, который считается безопасным, является innerText.Некоторые документы или руководства рекомендуют использовать его в качестве альтернативы innerHTML для смягчения воздействия XSS в innerHTML.Однако в зависимости от тега, к которому применяется innerText, код может быть выполнен.
Содержимое содержит следующий пример (который я изменил для ясности)
const tag = document.createElement("script"); tag.innerText = `console.log('Inner Text Used')`; document.body.appendChild(tag); //executes code
Однако в случаях MOST innerText - это метод, который вы бы использовали для предотвращения XSS, а также документировано в OWASP :
... используйте innerText / textContent.Это решит проблему, и это верный способ устранения уязвимостей XSS на основе DOM