Приложение на vuejs, в одном из интерфейсов вывожу пользовательское сообщение без фильтрации на xss.
<div v-html="userInput"></div>
Прочел, что для предотвращения XSS, можно использовать jQuery.text(). Но перед этим я решил сам попробовать что-нибудь вставить, чтоб знать от чего защищаться.
HTML теги вставляются и работают исправно, а вот javascript код не работает. Я так понимаю это потому, что данные этого компонента выводятся не при загрузке страницы, а после.
Я пробовал разные способы:
<script>
alert('XSS');
</script>
<script>
var str = "<script>alert('i am here');<\/script>";
var newdiv = document.createElement('div');
newdiv.innerHTML = str;
document.body.appendChild(newdiv);
</script>
Много всего перепробовал, во всех случаях эти скрипты вставляются на месте пользовательского сообщения и все, они не выполняются.
В чем опасность нефильтрации? Приведите, пожалуйста, пример, что злоумышленник может ввести, чтоб выполнить скрипт.