Как выглядит опасная строка запроса? - PullRequest
0 голосов
/ 20 июня 2010

Я хочу посмотреть, работает ли мое кодирование, однако приведенный мной пример просто возвращается к некодированному после того, как он возвращается на страницу.

<a href="http://search.msn.com/results.aspx%3fq%3dIamBad">Click Here!</a>

Возвращается к

<a href="http://search.msn.com/results.aspx?q=IamBad">Click Here!</a>

Редактировать

UrlEncode Ненадежный ввод используется в URL (например, значение в строке запроса) Нажмите здесь!

http://msdn.microsoft.com/en-us/library/aa973813.aspx

Итак, мой вопрос: я пытаюсь выяснить, работает ли что-то неправильно (то есть, почему это заставляет часть строки запроса снова выглядеть нормально).

Это потому, что строка запроса ничего не содержитдействительно необычно.Или что-то перекодирует его в исходную форму?

Ответы [ 2 ]

1 голос
/ 20 июня 2010

Вы просто не повторно отображаете входные данные от пользователя, которые поступают через отправку формы или через строку запроса, либо повторно отображаете его непосредственно для этого пользователя, либо сохраняете его в базе данных, которая затем отображает его для других пользователей сайта.

Скажем, у вас есть гиперссылка, подобная этой

/default.aspx?message=%3cscript%3ealert('Hello+world')%3b%3c%2fscript%3e

Что вы делаете не хотите сделать, это

string message = Request.QueryString["message"];
if (!string.IsNullOrEmpty(message))
    directlyDisplayedLiteral.Text = message; 

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

Вместо этого вы хотите закодировать ввод перед его отображением, чтобы он стал чем-то безобидным.

string message = Request.QueryString["message"];
if (!string.IsNullOrEmpty(message))
    directlyDisplayedLiteral.Text = Server.HtmlEncode(message); 

Итак, все, что происходит, это то, что <script>alert('Hello world');</script> записывается на экран, который на самом деле &lt;script&gt;alert('Hello world');&lt;/script&gt; в HTML.Там нет окна сообщения, на самом деле не выполняется скрипт, это просто мягкий текст на экране.

0 голосов
/ 20 июня 2010

Ниже приведен пример опасной строки запроса.

<a href="results.aspx?q=<script>alert('Attack')</script>">Click Here!</a>

То, что вы действительно должны проверять, это не просто кодирование URL-адреса, а то, что происходит, когда эта атака выполняется на вашей странице.

...