Есть ли в C # / ASP.NET простой способ проверить, что пользовательский ввод является URL-адресом для защиты от атак XSS? - PullRequest
1 голос
/ 16 октября 2010

У нас есть промежуточная страница, которая предупреждает людей, когда они покидают наш сайт.Проблема в том, что он принимает параметры строки запроса и слепо генерирует страницу, поэтому он уязвим для атак XSS.Мне было поручено исправить это, и я хочу сделать это правильно.

Ответы [ 4 ]

3 голосов
/ 16 октября 2010

Вы должны позвонить Server.HtmlEncode, чтобы правильно экранировать ваш сгенерированный HTML.

2 голосов
/ 16 октября 2010

Да, попробуйте это:

if(Uri.IsWellFormedUriString(url, UriKind.Absolute) && url.StartsWith("http"))
    Response.Write(string.Format("<a href=\"{0}\">{0}</a>",
        HttpUtility.HtmlEncode(url)));
1 голос
/ 16 октября 2010

Лучший способ - полностью избавиться от страницы и просто признать, что это веб-сайт, и заставить его вести себя как веб-сайт. Веб-сайты ссылаются на другие ресурсы, поэтому в Интернете более 200 миллионов сайтов, а не около десятка.

Если это не удастся, лучше всего начать с HtmlEncoding в качестве быстрого исправления , а затем заменить его поиском идентификаторов, чтобы перенести его на разные сайты.

Но на самом деле, те "ZOMG вы уходите!" страницы ужасны Они даже хуже, чем сайты, которые открывают новые вкладки для каждой так называемой «внешней» ссылки.

1 голос
/ 16 октября 2010

Так что не делать;

  1. Использовать регулярное выражение
  2. Использовать HtmlEncode без мыслей.

Что делать;

  1. Рассматривать все входные данные как ненадежные.
  2. Кодировать ввод перед его выводом.Однако убедитесь, что вы используете правильный тип кодировки.Если вы вводите пользовательский ввод в атрибут, то вы используете HtmlAttributeEncode, если это просто HTML, то вы используете HtmlEncode, если вы помещаете его в JavaScript, то это JavaScriptEncode.Если ваш javascript помещает его в div, то это HtmlEncode, за которым следует JavaScriptEncode.
  3. Рассмотрите возможность использования AntiXSS , который предоставляет больше механизмов кодирования и использует подход безопасного списка, который по своей природе безопаснее.
  4. Включите белые URL-адреса для выхода, чтобы пользователи не могли использовать эту страницу в качестве открытого реферера.У вас нет параметра, у которого есть URL, скорее есть GUID, который ищет URL из базы данных, таблицы сеансов или чего-либо еще.

(Раскрытие информации: у меня есть AntiXSS)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...