Межсайтовый скриптинг, широко известный как XSS, является одним из самых опасных методов атак, используемых злоумышленниками. киберпреступников, поэтому крайне важно, чтобы каждый разработчик и исследователь безопасности знал, что это такое и как предотвращать нападения. Итак, как вы можете принять меры против уязвимости XSS? Вы используете HTML, JavaScript или DOM для отображения данных, которые веб-сайт получает от пользователя. Одна или несколько из этих трех разных областей могут работать вместе.
Как предотвратить XSS с помощью HTML
XSS позволяет злоумышленникам внедрять вредоносные коды или скрипты на веб-страницы, ориентируясь на ничего не подозревающих пользователей, посещающих сайт. Это может привести к краже личных данных, перенаправлению посетителей на другой сайт, созданный киберпреступником, или иному изменению внешнего вида веб-страницы. Но вы можете предотвратить это; например, остановив их вставку HTML.
Представьте, что у вас есть сайт с гостевой книгой. Допустим, ваши посетители, использующие эту гостевую книгу, могут записывать здесь свои имена и сообщения, а их сообщения могут быть общедоступны. Злоумышленник, который захочет провести XSS-тест в вашей гостевой книге, воспользуется выделенной вами областью для написания сообщения. Этот киберпреступник запустит здесь код JavaScript. Например, злоумышленник может использовать такой код JavaScript, как:
<сценарий>тревога("XSS!")</script>
Злоумышленник должен использовать тег скрипта, чтобы это было успешным. В противном случае код JavaScript не будет работать. Вы должны закодировать оператор
Как предотвратить XSS с помощью JavaScript
Логика в HTML также допустимо в JavaScript. В некоторых приложениях можно распечатать данные, полученные сайтом от пользователя с помощью кода JavaScript.
Рассмотрим это кодирование:
<р идентификатор ="Распечатать"></п>
<сценарий>
документ.getElementById("тест").innerHTML = "";
</script>
Представьте, что на веб-сайте используется блок кода, подобный приведенному выше. Здесь разработчик использовал тег «p» под названием «print». Как видно из кода, из параметра «search» придет значение, и разработчик хочет показать это входящее значение в теге «p». Разработчик, выполнивший эту операцию, хотел использовать функцию innerHTML JavaScript.
Теперь давайте посмотрим на ситуацию с точки зрения злоумышленника. В таком случае злоумышленник выполнит XSS-тест внутри тега script. Для этого злоумышленнику не нужно перезапускать тег, поскольку тег «скрипт» уже используется. Затем злоумышленник может написать такой тест:
имя файла.php? поиск=а" тревога("XSS!"); е= "
Этот код будет отображаться на веб-сайте как:
документ.getElementById("тест").innerHTML = " а" тревога("XSS!"); е="";
Эта атака будет успешной. Чтобы лучше понять проблему, давайте рассмотрим еще один пример техники, которую может использовать злоумышленник. Хакер мог применить XSS-тест, например:
имя файла.php? поиск=";</script><Эм>Фатих</em>
Вот как это будет выглядеть при просмотре с сайта:
документ.getElementById("тест").innerHTML = "";</script><Эм>Фатих</em>";
Это может показаться немного странным, потому что злоумышленник закрыл первый тег «script», используя здесь структуру, подобную «/script». Таким образом, злоумышленник может перезапустить любой код JavaScript и HTML, который он захочет.
Если подумать об этих двух разных примерах, защита от XSS кажется довольно простой. Необходимая мера предосторожности заключается в кодировании " и ' символы, которые вы видите в первом примере. Во втором примере закодируйте символы < и >.
Как предотвратить XSS с помощью DOM
В этом варианте XSS данные, которые веб-сайт получает от пользователя, могут вмешиваться в свойства элемента DOM. Например, информация о цвете, которую сайт получает от пользователя, может влиять на цвет фона таблицы или всего фона страницы. Так что пользователь невольно вмешивается в стилевое оформление тела и таблицы. Следующий код является хорошим примером для этого:
<цвет тела ="<?php эхо $_GET['цвет']; ?>"/>
При этом сайт использует параметр «цвет», полученный от пользователя непосредственно в свойстве «bgcolor» элемента «body». Так что же может сделать злоумышленник в этот момент? Они могли выполнить этот вредоносный код:
имя файла.php? цвет = красный" загрузка ="тревога('XSS!')
Вот так это выглядит при просмотре с сайта:
<цвет тела =" красный" загрузка ="тревога('XSS!') "/>
Чтобы этого не произошло, разработчику пришлось бы кодировать " характер.
Однако следует отметить еще один важный элемент JavaScript. Следующий фрагмент кода является примером для этого:
<ссылка ="JavaScript: предупреждение('XSS!')">
Это означает, что можно напрямую запускать некоторый код JavaScript. Одна из лучших профилактических мер — убедиться, что веб-сайт проверяет, являются ли данные, которые он получает от пользователей, реальным URL-адресом. Самый простой способ — убедиться, что есть такие выражения, как «HTTP» и «HTTPS» (безопасная версия HTTP) в связи.
Пример функции для предотвращения XSS с PHP
Вы видели несколько примеров того, как защитить приложение или веб-сайт от XSS-атак. Вы можете использовать фрагменты кода в этой таблице с PHP:
Кодировать в HTML |
htmlspecialchars($str, ENT_COMPAT) |
Кодировать в JavaScript и атрибуте DOM |
htmlspecialchars($str, ENT_NOQUOTES) |
Проверка URL |
'/^(((https?)|(\/\/))).*/'; |
Обратите внимание, что это всего лишь примеры, и они будут различаться в зависимости от используемого вами языка программного обеспечения.
Ты можешь создать веб-приложение с PHP и попробуйте коды, которые вы видите выше, чтобы отправить их текстом. Если вам интересно, как использовать все эти методы, вы можете почерпнуть некоторые идеи из приведенного ниже блока кода PHP, который должен быть полезен, даже если вы используете другой язык:
<?php
$данные = $_GET['данные'];функцияin_attribute($стр){
возвращаться htmlspecialchars($str, ENT_COMPAT);
// ENT_COMPAT будет кодировать символ двойной кавычки (").
}
функцияin_html($стр){
$ссылка = '/^(((https?)|(\/\/))).*/';
если(!preg_match($ссылка, $стр))
{
возвращаться "/";
}
возвращаться $стр;
}
$данные = in_attribute($данные);
$данные = in_html($данные);
$данные = реальный_адрес (данные);
?>
Защитите свой сайт от XSS и не только
XSS — популярный вектор атаки, используемый хакерами. Обычно значение пути в URL-адресе, любое поле на вашем веб-сайте, куда можно вводить данные (например, поля форм и комментариев), можно использовать для проверки на уязвимость XSS. Но, конечно, существует множество различных методов, которые киберпреступники могут использовать для атаки на сайт, особенно если у вас есть веб-сайт, на котором много пользователей и который скрывает их информацию.