Сводка

27.10.2026

Как чаще всего взламывают сайты: семь дверей, которые забывают закрыть

7 мин чтенияOWASPвеб-безопасностьаудит

Большинство взломов — не голливудские атаки, а открытые двери: слабые пароли, старые плагины, забытые бэкапы. Семь самых частых входов и как закрыть каждый.

Когда владелец бизнеса представляет себе взлом, он часто видит что-то сложное: гениальный хакер, уязвимость нулевого дня, недели подготовки. На практике большинство инцидентов выглядит скучнее. Злоумышленник не ломает стену — он находит дверь, которую забыли закрыть. Обзоры вроде OWASP Top 10 и ежегодного Verizon Data Breach Investigations Report из года в год описывают одни и те же типовые причины.

Ниже — семь таких дверей. Для каждой — что это и как её закрыть.

1. Слабые и повторяющиеся пароли без второго фактора

Сотрудник использует один пароль для админки обменника и для форума, который утёк три года назад. Утёкшие пары «почта — пароль» автоматически проверяют на тысячах сайтов — это называется credential stuffing. Если на входе в админку нет второго фактора, такой перебор рано или поздно срабатывает.

Как закрыть. Обязательная 2FA для всех, у кого есть доступ к админке и серверам. Ограничение частоты попыток входа. Менеджер паролей вместо «одного надёжного пароля на всё».

2. Устаревшие CMS, плагины и библиотеки

Для известных уязвимостей в популярных CMS, плагинах и библиотеках существуют готовые инструменты эксплуатации. Сайт на версии двухлетней давности для автоматического сканера — лёгкая добыча, даже если его собственный код написан аккуратно.

Как закрыть. Регулярные обновления по расписанию, а не «когда будет время». Проверка зависимостей (composer audit, npm audit) в CI. Удаление плагинов и модулей, которые не используются, — их тоже нужно обновлять, а пользы от них ноль.

3. Открытые .env, .git и бэкапы

Файл .env с паролями от базы, папка .git с историей кода, архив backup.zip в корне сайта — всё это регулярно оказывается доступным по прямой ссылке. Сканеры проверяют такие пути первыми, потому что находка сразу даёт ключи от всего.

Как закрыть. Корень веб-сервера должен указывать на публичную папку приложения (в Laravel — public), а не на весь проект. Запрет доступа к скрытым файлам в nginx. Бэкапы хранятся вне веб-сервера, а лучше — на другом сервере.

4. Загрузка файлов без проверок

Форма загрузки документа для KYC или аватарки принимает любой файл. Если злоумышленник загрузит вместо картинки исполняемый скрипт, а сервер позволит его запустить, у атакующего появится собственная точка входа на сервер.

Как закрыть. Проверка типа файла по содержимому, а не по расширению. Хранение загрузок вне публичной папки или в отдельном хранилище. Запрет выполнения скриптов в каталоге загрузок на уровне веб-сервера. Случайные имена файлов вместо пользовательских.

5. XSS и кража сессии

Межсайтовый скриптинг (XSS) — когда сайт показывает введённый пользователем текст как код. Например, комментарий к заявке, который оператор открывает в админке. Если в комментарии спрятан скрипт, он выполнится в браузере оператора — с его правами и его сессией.

Как закрыть. Экранирование всего, что выводится на страницу (шаблонизаторы вроде Blade делают это по умолчанию — важно не обходить его без необходимости). Cookie сессии с флагами HttpOnly и Secure. Заголовок Content-Security-Policy, ограничивающий, какие скрипты вообще может выполнять страница.

6. Сломанный контроль доступа: чужая заявка по номеру

Клиент открывает свою заявку по адресу с номером, меняет номер на соседний — и видит чужую заявку с реквизитами и суммой. Это называется IDOR, небезопасная прямая ссылка на объект. Похожая ошибка — когда скрытая кнопка в интерфейсе спрятана, но сам адрес действия на сервере не проверяет права.

Как закрыть. Проверка прав на сервере для каждого объекта и каждого действия: «принадлежит ли эта заявка текущему пользователю». В Laravel для этого есть политики (Policies). Непредсказуемые идентификаторы (UUID) вместо порядковых номеров — как дополнительная мера, но не замена проверке.

7. SSRF и неверно настроенные серверы

SSRF — подделка запросов со стороны сервера. Если приложение умеет «сходить по ссылке», которую передал пользователь (загрузить картинку по URL, проверить вебхук), злоумышленник может заставить сервер обратиться к внутренним ресурсам: служебным API, базе данных, панели облачного провайдера.

Рядом с этим — классические ошибки конфигурации: база данных, открытая в интернет, Redis без пароля, панель управления со стандартным логином.

Как закрыть. Для запросов по пользовательским ссылкам — белый список доменов и запрет обращений к внутренним адресам. Закрытые порты: наружу смотрят только веб-сервер и SSH, а базы данных доступны лишь внутри. Смена всех стандартных паролей при установке.

И восьмая, за пределами кода: фишинг сотрудников

Даже идеальный код не спасёт, если оператор сам введёт пароль на поддельной странице или установит «обновление», присланное в мессенджере. Технические меры здесь — 2FA с аппаратными ключами или приложениями-аутентификаторами, минимальные права для каждой роли и журнал действий в админке, чтобы необычное поведение было видно сразу.

Большинство взломов — не высокое искусство, а открытые двери. Их закрывает регулярная гигиена, а не разовый героизм.

  1. 2FA и ограничение попыток входа для всех служебных доступов.
  2. Обновления по расписанию и проверка зависимостей в CI.
  3. Корень сайта — только публичная папка; бэкапы и .env — вне досягаемости.
  4. Проверка прав на сервере для каждого объекта, загрузки — без права на исполнение.
  5. Наружу — только веб-сервер и SSH; всё остальное закрыто.