Как обрабатывать XSS в строке запроса URL-адреса в asp.net 3.5 с использованием С#

В настоящее время я пытаюсь защитить свой сайт от XSS-атак в URL-адресе. Например, если злоумышленник использует Firefox, он может сделать следующее.

myxsssite.com/mypage.aspx?d"><script class="none&>alert(1);</script clas="none&><!--=1

И скрипт запустится. Я искал пару дней и не могу найти решение, которое работает. В настоящее время я пробовал библиотеку AntiXSS от MS. Я не думаю, что он работает правильно, я кодирую весь URL-адрес так

Mircosoft.Security.Application.Encoder.HtmlEncode(path);

Я также пробовал все другие методы в этом классе, и скрипт все еще выполняется до загрузки страницы. Я использую ASP.net 3.5 с Webforms и не могу выполнить обновление.


person eskers    schedule 14.07.2016    source источник
comment
owasp.org/index.php/   -  person MethodMan    schedule 14.07.2016
comment
Чтобы дать полный ответ, необходимо увидеть, где и как именно вы используете закодированное значение.   -  person Michael Liu    schedule 14.07.2016
comment
Затем закодированный путь отправляется в app.Context.RewritePath, который возвращается в метод Init класса IHttpModule.   -  person eskers    schedule 14.07.2016
comment
XSS возникает только тогда, когда вы вставляете вредоносное содержимое на веб-страницу. Где это происходит?   -  person Michael Liu    schedule 14.07.2016
comment
как указано в первоначальном вопросе, это происходит в URL-адресе firefox.   -  person eskers    schedule 14.07.2016
comment
XSS не встречается в URL-адресе; сам по себе JavaScript в URL-адресе не является XSS-уязвимостью. XSS возникает только тогда, когда какой-либо код копирует вредоносное содержимое с URL-адреса на веб-страницу без надлежащего кодирования содержимого. Вам нужно отследить, где в коде это происходит.   -  person Michael Liu    schedule 15.07.2016
comment
Извините, я новичок в архитектуре .net 3.5. Насколько я понимаю, у нас есть этот класс, который наследуется от IHttpModule, мы получаем URL-адрес, если у него есть параметры запроса, мы запускаем его через некоторый код, который определяет, куда он пытается перейти, затем мы RewritePath (newUrl). Я также понимаю (что может быть проблемой), что после того, как мы это сделаем, мы перезагрузим страницу с заданным newUrl. Проведенный нами пентест показал, что это XSS-уязвимость.   -  person eskers    schedule 15.07.2016


Ответы (1)


https://www.microsoft.com/en-us/download/details.aspx?id=28589

у них есть эта dll, что в основном все, что вам нужно сделать, это использовать метод sanitize, и если есть разница между исходным значением и санированным значением, это означает, что может быть попытка XSS, и вы либо выбрасываете все это, либо просто используйте очищенное значение.

не используйте какой-либо метод кодирования, есть метод, который называется «дезинфицировать».

РЕДАКТИРОВАТЬ: пример кода

val = Microsoft.Security.Application.Sanitizer.GetSafeHtmlFragment(val);
val = System.Web.HttpUtility.HtmlDecode(val);

РЕДАКТИРОВАТЬ 2: https://www.nuget.org/packages/HtmlSanitizationLibrary/

я использую dll HtmlSanitizationLibrary.dll

person bresleveloper    schedule 14.07.2016
comment
Это текущая библиотека, которую я использую, нет метода очистки. - person eskers; 14.07.2016
comment
Это странно, я не вижу класса Sanitizer, я смотрел в проводнике сборок, обозревателе объектов и с помощью автозаполнения. Я также пробовал каждую версию AntiXssLibrary в своем проекте. У меня есть только следующие AntiXss, Encoder, UnicodeCharacterEncoder. - person eskers; 14.07.2016
comment
вы правы, dll - это HtmlSanitizationLibrary.dll, моя ошибка, добавлена ​​​​новая ссылка - person bresleveloper; 14.07.2016