Основная проблема заключается в том, что пользователь управляет некоторыми данными, которые вы отображаете на странице небезопасным способом. Является ли это от их имени (мое имя - ) или любого другого контента.
Я использую следующий подход, смотрю на ваш результат (или лучше задумываюсь об этом) и вижу, на каждом этапе:
IHtmlString
, поэтому избегайте этого Type
(или методы, которые возвращают его как Html.Raw()
), поэтому @("")
является string
, поэтому он будет закодирован, и скрипт не будет запущен string
был управляемым пользователем " "
с шаблоном @Html.Raw(Model.UserBadString)
Сделайте шаблон @Model.UserSafeString
", это берет на себя управление функцией JS от пользователя и оставляет их с закодированным Razor параметром, что они не могут выполнять XSS с @Html.Raw(sanitizer.Sanitize(Model.UserBadString))
, но вы, вероятно, захотите сделать что-то приятнее, хорошая практика кодирования и т. д. Главное, чтобы string
был дезинфицирован . В стороне, убедитесь, что вы держите очень близко к обычным свойствам, таким как .innerHTML
в JS (или ужасный jQuery .html()
, который вызывает eval()
), как если бы они занимали контент с контролируемым пользователем, у вас будет такая же проблема. Но те же действия могут быть применены, (1) использовать .innerText
, или (3) в противном случае использовать библиотеку очистки в строке, например DOMPurify, перед тем, как передать ее JS ( https://github.com/cure53/DOMPurify ). К сожалению, в этом случае вариант (2) не рекомендуется, так как все, что осталось, должно быть безопасно для вас или для меня, я бы скорее доверял DOMPurify, чтобы сделать это:)
server_name
может быть IP
Если кто-то делает запрос, используя IP-адрес вместо имени сервера, поле заголовка запроса «Host» будет содержать IP-адрес, и запрос обрабатываться с использованием IP-адреса в качестве имени сервера:
blockquote>server_name example.org www.example.org "" 192.168.1.1 ;