Что делает вход уязвимым для XSS? - PullRequest
7 голосов
/ 25 мая 2010

Я читал о XSS и создал простую форму с текстом и отправил ввод, но когда я выполняю <script>alert();</script>, ничего не происходит, сервер получает эту строку, и все.

Что я должен сделать, чтобы сделать его уязвимым ?? (тогда я узнаю, что я не должен делать, хе-хе)

Приветствие.

Ответы [ 5 ]

20 голосов
/ 25 мая 2010

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

Пример PHP:

<!doctype html>
<html lang="en">
    <head><title>XSS test</title></head>
    <body>
        <form><input type="text" name="xss"><input type="submit"></form>
        <p>Result: <?= $_GET['xss'] ?></p>
    </body>
</html>

Пример JSP:

<!doctype html>
<html lang="en">
    <head><title>XSS test</title></head>
    <body>
        <form><input type="text" name="xss"><input type="submit"></form>
        <p>Result: ${param.xss}</p>
    </body>
</html>

В качестве альтернативы вы можете снова отобразить значение в элементах ввода, что также часто встречается:

<input type="text" name="xss" value="<?= $_GET['xss'] ?>">

соответственно.

<input type="text" name="xss" value="${param.xss}">

Таким образом, «странные» строки атаки, такие как "/><script>alert('xss')</script><br class=", будут работать, потому что сервер все равно будет отображать их как

<input type="text" name="xss" value=""/><script>alert('xss')</script><br class="">

Решения для предотвращения XSS среди прочих htmlspecialchars() и fn:escapeXml() для PHP и JSP соответственно. Они заменят <, > и " на &lt;, &gt; и &quot;, так что ввод от конечного пользователя не будет буквально встроен в источник HTML, а вместо этого будет отображаться как это было введено.

20 голосов
/ 25 мая 2010

Пусть сервер выведет ввод обратно клиенту.

4 голосов
/ 25 мая 2010

Вы должны «внедрить» скрипт. Поэтому, если у вас есть текстовый ввод, вы должны указать в форме:

" /> <script>alert();</script>

Таким образом, вы сначала закрываете атрибут существующего HTML, а затем внедряете свой собственный код. Идея состоит в том, чтобы вырваться из кавычек.

2 голосов
/ 25 мая 2010

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

1 голос
/ 26 мая 2010

Три простых вещи:

  1. Если вы не выводите ненадежные данные на страницу в какой-то момент, у XSS нет возможности
  2. Все ваши неиспользованные данные (формы, строки запросов, заголовки и т. Д.) Должны быть проверены по белому списку, чтобы убедиться, что они находятся в приемлемом диапазоне
  3. Весь вывод на экран должен быть закодирован соответствующей библиотекой (например, Anti-XSS для .NET) на соответствующем языке (HTML, CSS, JS и т. Д.).

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

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