Конфигурация Nginx для хост-сервера под ip и портом вместо имени домена

Основная проблема заключается в том, что пользователь управляет некоторыми данными, которые вы отображаете на странице небезопасным способом. Является ли это от их имени (мое имя - ) или любого другого контента.

Я использую следующий подход, смотрю на ваш результат (или лучше задумываюсь об этом) и вижу, на каждом этапе:

  1. Пусть Razor сделает это, по умолчанию Razor обрабатывает кодировку всех HTML-символов на странице, это не применяется, если вы используете IHtmlString, поэтому избегайте этого Type (или методы, которые возвращают его как Html.Raw()), поэтому @("") является string, поэтому он будет закодирован, и скрипт не будет запущен
  2. . Если он сломан, это означает, что ваша строка имеет некоторый HTML / JS, которые вы на самом деле хотите отобразить. Поэтому попробуйте и переместите это прямо на шаблон Razor (HTML / JS) или получите его по ссылке (JS). Вместо того, чтобы весь string был управляемым пользователем "" с шаблоном @Html.Raw(Model.UserBadString) Сделайте шаблон @Model.UserSafeString ", это берет на себя управление функцией JS от пользователя и оставляет их с закодированным Razor параметром, что они не могут выполнять XSS с
  3. . Вы хотите, чтобы Пользователь имел контроль над HTML, тогда у вас будет для дезинфекции строки на выходе на страницу, используя что-то вроде ( https://github.com/mganss/HtmlSanitizer ). Таким образом, шаблон может быть @Html.Raw(sanitizer.Sanitize(Model.UserBadString)), но вы, вероятно, захотите сделать что-то приятнее, хорошая практика кодирования и т. д. Главное, чтобы string был дезинфицирован

. В стороне, убедитесь, что вы держите очень близко к обычным свойствам, таким как .innerHTML в JS (или ужасный jQuery .html(), который вызывает eval()), как если бы они занимали контент с контролируемым пользователем, у вас будет такая же проблема. Но те же действия могут быть применены, (1) использовать .innerText, или (3) в противном случае использовать библиотеку очистки в строке, например DOMPurify, перед тем, как передать ее JS ( https://github.com/cure53/DOMPurify ). К сожалению, в этом случае вариант (2) не рекомендуется, так как все, что осталось, должно быть безопасно для вас или для меня, я бы скорее доверял DOMPurify, чтобы сделать это:)

0
задан Anton 18 January 2019 в 20:26
поделиться

1 ответ

server_name может быть IP

Если кто-то делает запрос, используя IP-адрес вместо имени сервера, поле заголовка запроса «Host» будет содержать IP-адрес, и запрос обрабатываться с использованием IP-адреса в качестве имени сервера:

server_name  example.org
             www.example.org
             ""
             192.168.1.1
             ;
0
ответ дан Shawn C. 18 January 2019 в 20:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: