XSS на вывод JavaScript в ASP.Net - PullRequest
0 голосов
/ 22 апреля 2011

У меня есть страница, которая принимает параметр строки запроса и выводит его как переменную javascript. Эта переменная будет использоваться в качестве параметра для перехода на страницу.

Только JSEncode в параметре строки запроса предотвратит XSS?

Ввод:

www.foo.com?t=abc<script>alert('hello xss')</script>

Я хочу выдать это значение t как js var

var qs = Request.QueryString["t"].jsencode();

Ответы [ 3 ]

2 голосов
/ 23 апреля 2011

Посмотрите на класс AntiXSS в Библиотеке веб-защиты Microsoft .У него есть множество полезных методов для дезинфекции ввода, в том числе один для выполнения именно того, что вы хотите: JavaScriptEncode.

0 голосов
/ 23 апреля 2011

Вы хотите решить это в двух частях.Во-первых, проверьте ненадежный ввод по белому списку, так что в этом случае вы хотите убедиться, что «t» действительно является действительным URL:

var sourceUri = Request.QueryString["t"];
if (!Uri.IsWellFormedUriString(sourceUri, UriKind.Absolute))
{
  // Not a valid URI - bail out
}

Во-вторых, вы должны вывести кодирование для JavaScript.Лучший способ сделать это - захватить AntiXSS и реализовать следующее:

var encodedString = Encoder.JavaScriptEncode(sourceUri);

Для получения дополнительной информации попробуйте OWASP Top 10 для разработчиков .NET, часть 2:Сценарии сайта (XSS) .

0 голосов
/ 23 апреля 2011

В дополнение к правильному кодированию строки запроса для переменной JavaScript вы должны проверить, действительно ли перенаправление разрешено вашей логикой приложения.Т.е. вы можете также захотеть полностью заблокировать что-то вроде www.foo.com?t=http://very.evil.com/dark.side и избавиться от неудачной визуализации страницы (если только вы не ожидаете, что ваша страница будет перенаправлять на другие сайты).

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