Иногда на стороне сервера генерируются строки для встраивания в встроенный код JavaScript. Например, если «Имя пользователя» должно быть сгенерировано ASP.NET. Тогда это выглядит так.
<script>
var username = "<%UserName%>";
</script>
Это небезопасно, поскольку у пользователя может быть его / ее имя
</script><script>alert('bug')</script></script>
Это уязвимость XSS.
Итак, в основном код должен быть:
<script>
var username = "<% JavascriptEncode(UserName)%>";
</script>
Что делает JavascriptEncode , так это добавляет символ "\" перед "/" и "'" и "" ". Таким образом, выходной html похож.
var username = " alert (\ 'bug \') ";
Браузер не будет интерпретировать «» как конец блока скрипта. Итак, XSS избегают.
Однако, там все еще есть "<" и ">". Также предлагается избегать этих двух персонажей. Прежде всего, я не верю, что стоит поменять "<" на "& lt;" и от «>» до «& gt;» Вот. И я не уверен, что изменение "<" на "\ <" и ">" на "\>" можно узнать во всех браузерах. Кажется, нет необходимости выполнять дальнейшее кодирование для «<» и «>».
Есть какие-нибудь предложения по этому поводу?
Спасибо.