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

Проверка сайта на уязвимости: пошаговое руководство

Проверка сайта на уязвимости: сканеры, ручной аудит и пентест. Пошаговый план, чек-лист OWASP Top 10 и график проверок для сайта любого размера.

Проверка сайта на уязвимости: с чего начать и как не пропустить главное

Чтобы проверить сайт на уязвимости, составьте список всех его компонентов, прогоните внешний периметр и приложение через автоматические сканеры, проверьте CMS, плагины и права доступа вручную, а результаты разберите по степени риска и исправьте самое критичное в первую очередь.

Уязвимость, найденная вами, — это строчка в отчёте. Уязвимость, найденная злоумышленником, — это утечка данных, потеря позиций в Яндексе и Google и простой бизнеса.

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

Что такое уязвимость сайта и почему проверять нужно всем

Уязвимость — это слабое место в коде, настройках сервера или бизнес-логике, которым можно воспользоваться, чтобы получить несанкционированный доступ, украсть данные, внедрить вредоносный код или вывести сайт из строя. Причём речь не только о крупных порталах: большинство взломов автоматизировано. Боты круглосуточно обходят интернет в поисках устаревших версий CMS, открытых админок и известных дыр в плагинах, и им всё равно, интернет-магазин перед ними или визитка небольшой компании.

Последствия взлома выходят далеко за рамки технической проблемы. Поисковые системы, включая Яндекс и Google, могут пометить заражённый сайт как опасный и понизить его в выдаче, браузеры начинают показывать пугающее предупреждение, а клиенты уходят к конкурентам. Если на сайте хранятся персональные данные, к репутационным потерям добавляется ответственность по закону о персональных данных (152-ФЗ).

Поэтому проверка на уязвимости — не разовая акция «на всякий случай», а часть регулярного обслуживания сайта, как резервное копирование или обновление контента.

Четыре уровня, которые проверяются на сайте

01 / периметр
Сеть и домен

Открытые порты, лишние сервисы, поддомены, срок и настройки SSL-сертификата, DNS-записи.

02 / сервер
Сервер и конфигурация

Версии ПО, права на файлы, заголовки безопасности, доступ к служебным файлам и резервным копиям.

03 / приложение
Код и логика

SQL-инъекции, XSS, CSRF, загрузка файлов, обход авторизации, ошибки в работе с сессиями.

04 / компоненты
CMS, плагины, библиотеки

Устаревшие версии, заброшенные плагины, уязвимые зависимости и сторонние скрипты.

OWASP Top 10: карта самых частых уязвимостей

Международный проект OWASP регулярно публикует список из десяти наиболее критичных категорий рисков веб-приложений. Это отличная отправная точка для любой проверки: если вы закрыли эти десять направлений, вы убрали большую часть реальных угроз.

Нарушение контроля доступа. Пользователь получает доступ к чужим заказам, профилям или админ-функциям, просто подменив идентификатор в адресе.

Криптографические сбои. Данные передаются без HTTPS, пароли хранятся в открытом виде или с устаревшим алгоритмом хеширования.

Инъекции. Через формы и параметры в базу данных или систему попадает вредоносный запрос: SQL-инъекции, внедрение команд, межсайтовый скриптинг (XSS).

Небезопасная архитектура и неверная конфигурация. Включён режим отладки, остались стандартные пароли, открыты каталоги со служебными файлами.

Устаревшие компоненты. Старая версия CMS, плагина или библиотеки с уже известной и опубликованной уязвимостью.

Ошибки аутентификации. Слабые пароли, отсутствие ограничения попыток входа и двухфакторной защиты.

Нарушение целостности данных и ПО. Подгрузка скриптов из недоверенных источников, небезопасные обновления.

Недостаточное журналирование и мониторинг. Атака идёт неделями, а владелец об этом не знает.

Подделка запросов на стороне сервера (SSRF). Сайт заставляют обращаться к внутренним ресурсам, к которым у атакующего нет прямого доступа.

Три подхода: сканирование, ручной аудит и пентест

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

Автоматическое сканирование — самый быстрый и доступный способ. Сканер обходит страницы, подставляет в параметры типовые «атакующие» значения и сверяет ответы сервера с базой известных проблем. Он отлично находит шаблонные уязвимости, отсутствующие заголовки безопасности и устаревшие версии ПО, но не понимает бизнес-логику: например, не заметит, что покупатель может изменить цену товара в запросе или посмотреть чужой заказ.

Ручной аудит выполняет специалист: он изучает архитектуру, просматривает код, проверяет разграничение прав и сценарии, которые сканер не воспроизведёт. Пентест (тест на проникновение) идёт дальше: эксперт действует как реальный злоумышленник и пытается объединить мелкие недочёты в полноценную атаку, показывая, чем это грозит бизнесу на самом деле.

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

МетодЧто выявляетКогда применятьПримеры инструментов
Автоматическое сканированиеИзвестные уязвимости, XSS, SQL-инъекции, ошибки конфигурацииРегулярно и перед каждым релизомOWASP ZAP, Nikto, Acunetix
Проверка CMS и зависимостейУстаревшие версии, уязвимые плагины и библиотекиЕженедельно и после любых обновленийWPScan, npm audit, OWASP Dependency-Check
Ручной аудитОшибки логики, обход прав доступа, небезопасный кодПеред запуском крупных функций и оплатыBurp Suite, ревью кода
ПентестЦепочки атак и реальную эксплуатируемость дырРаз в год и после серьёзных измененийКоманда специалистов, Burp Suite, Nmap

Как подготовиться к проверке и не навредить сайту

Прежде чем запускать любой сканер, убедитесь, что у вас есть право это делать. Проверять можно только собственные ресурсы или сайты, на аудит которых вы получили письменное согласие владельца. Несанкционированное тестирование чужого сайта может быть квалифицировано как неправомерный доступ к компьютерной информации по статье 272 УК РФ, даже если намерения были добрыми.

Второе правило — безопасность самой проверки. Активные сканеры отправляют тысячи запросов, заполняют формы тестовыми данными и могут создать мусорные записи, перегрузить слабый хостинг или случайно запустить рассылку. Поэтому идеально проводить тестирование на копии сайта (staging) с отдельной базой данных. Если такой копии нет, выберите время минимальной нагрузки, сделайте полную резервную копию файлов и базы и предупредите хостинг-провайдера и команду.

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

Пошаговая проверка сайта на уязвимости

  1. 01

    Проведите инвентаризацию. Выпишите все домены и поддомены, админки, API, тестовые стенды, формы, подключённые сервисы и сторонние скрипты. Забытый поддомен со старой версией сайта — любимая цель атакующих.

  2. 02

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

  3. 03

    Проверьте внешний периметр. Утилита Nmap покажет открытые порты и работающие сервисы, а Qualys SSL Labs оценит настройки HTTPS: версии протоколов, сертификат, цепочку доверия. Всё, что не нужно снаружи (базы данных, панели управления), должно быть закрыто.

  4. 04

    Запустите автоматический сканер. OWASP ZAP или Nikto обойдут сайт и найдут типовые уязвимости. Начните с пассивного режима, затем переходите к активному на тестовой копии.

  5. 05

    Проверьте заголовки безопасности и cookies. Mozilla Observatory покажет, настроены ли HSTS, Content-Security-Policy, X-Frame-Options, флаги Secure и HttpOnly у сессионных cookies.

  6. 06

    Проанализируйте CMS, плагины и зависимости. Сверьте версии с актуальными, удалите неиспользуемые расширения. Для WordPress подойдёт WPScan, для проектов на JavaScript — npm audit, для остальных — OWASP Dependency-Check.

  7. 07

    Проверьте авторизацию и права. Убедитесь, что у админки нет стандартного адреса и пароля, включена двухфакторная защита, число попыток входа ограничено, а обычный пользователь не может открыть чужие данные, меняя идентификатор в адресе.

  8. 08

    Протестируйте формы и загрузку файлов. Проверьте, как сайт реагирует на спецсимволы и скрипты в полях, разрешены ли опасные расширения файлов и можно ли выполнить загруженный файл на сервере.

  9. 09

    Загляните в инструменты поисковиков. В Яндекс Вебмастере изучите раздел «Безопасность и нарушения», в Google Search Console — отчёт о проблемах безопасности. Эти сервисы сообщают о заражении, которое вы могли не заметить.

  10. 10

    Составьте отчёт, исправьте и перепроверьте. Распределите находки по критичности, устраните их по порядку и запустите проверку повторно, чтобы убедиться, что дыры действительно закрыты.

Как часто проверять сайт

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

Разумный подход — многоуровневый график. Лёгкие автоматические проверки делаются часто и почти не отнимают времени, а глубокие и дорогие — редко, но регулярно. Ниже — ориентир, который можно адаптировать под размер и критичность вашего проекта.

График проверок: от каждого релиза до ежегодного пентеста

01 / каждый релиз
Автопроверка

Сканирование зависимостей и быстрый прогон ZAP до выкладки на боевой сервер.

02 / еженедельно
Обновления и логи

Контроль версий CMS и плагинов, просмотр логов, проверка уведомлений в Вебмастере и Search Console.

03 / раз в квартал
Полное сканирование

Глубокий скан, ревизия прав доступа, проверка резервных копий и сертификатов.

04 / раз в год
Пентест

Независимый аудит специалистами, имитация реальной атаки и отчёт для руководства.

Где чаще всего ошибаются при проверке

Даже технически грамотные владельцы сайтов нередко делают проверку формально: запускают один сканер, смотрят на зелёную галочку и считают вопрос закрытым. Такой подход создаёт ложное чувство защищённости, которое опаснее честного незнания. Разберём самые распространённые просчёты.

Типичные ошибки при проверке сайта на уязвимости

Большинство пропущенных дыр связано не со сложностью атак, а с неполной или неправильно организованной проверкой.

Как делают неправильно

  • Полагаются только на один автоматический сканер и не проверяют бизнес-логику
  • Сканируют только главную страницу и забывают про поддомены, админку и API
  • Запускают агрессивное сканирование на боевом сайте без резервной копии
  • Находят проблемы, но не исправляют их или не перепроверяют результат
  • Проверяют сайт один раз при запуске и больше к этому не возвращаются

Как делать правильно

  1. 01

    Комбинировать сканеры, проверку компонентов и ручной анализ прав доступа

  2. 02

    Начинать с инвентаризации всех доменов, поддоменов и точек входа

  3. 03

    Тестировать на staging-копии или в окно минимальной нагрузки с бэкапом

  4. 04

    Фиксировать найденное в отчёте, назначать ответственных и сроки, затем запускать повторную проверку

  5. 05

    Закрепить регулярный график проверок и встроить автоматические тесты в процесс релиза

Как читать отчёт сканера и расставлять приоритеты

Отчёт автоматического сканера может содержать десятки и сотни пунктов, и первая реакция — растерянность. Важно понимать: не все находки одинаково опасны. Часть из них — информационные замечания (например, раскрытие версии сервера), часть — ложные срабатывания, а несколько действительно критичных дыр способны разрушить проект за вечер.

Для оценки используйте два критерия: насколько легко уязвимость эксплуатировать и что именно потеряет бизнес при успешной атаке. SQL-инъекция в форме входа с доступом к базе клиентов — это немедленный приоритет. Отсутствие одного из необязательных заголовков на странице без личных данных может подождать плановой доработки.

Каждую находку проверяйте вручную, прежде чем отправлять разработчикам: так вы отсеете ложные срабатывания и сэкономите команде время. А в отчёт включайте не только описание проблемы, но и шаги воспроизведения, затронутые страницы и рекомендации по исправлению.

Приоритеты исправления уязвимостей

Ориентировочные сроки — их стоит скорректировать под ваш проект и ресурсы команды.

critical
Критический риск

Удалённое выполнение кода, SQL-инъекция с доступом к данным, открытая админка со слабым паролем.

до 24 часов
high
Высокий риск

Хранимый XSS, обход авторизации, уязвимый плагин с публичным эксплойтом.

до 7 дней
medium
Средний риск

Отсутствие CSP и HSTS, слабые настройки cookies, раскрытие служебной информации.

до 30 дней
low
Низкий риск

Информационные замечания, раскрытие версии ПО, небольшие недочёты конфигурации.

по плану
Поисковые системы сами следят за безопасностью сайтов. Если Яндекс или Google обнаружат вредоносный код или взлом, в выдаче и браузерах может появиться предупреждение об опасном сайте, а позиции просядут. Подробности и примеры заражённых страниц смотрите в Яндекс Вебмастере (раздел «Безопасность и нарушения») и в Google Search Console (отчёт о проблемах безопасности). После исправления отправьте сайт на перепроверку.

Что делать, если сайт уже взломан

Если проверка показала следы взлома или поисковик прислал уведомление о заражении, действовать нужно быстро и последовательно. Паника и хаотичные правки только усложняют расследование.

Сначала изолируйте проблему: переведите сайт в режим обслуживания или ограничьте доступ, чтобы не заражать посетителей. Затем сохраните копию текущего состояния и логи сервера — они понадобятся, чтобы понять, как именно проникли злоумышленники. Далее смените все пароли и ключи: доступы к хостингу, FTP, базе данных, админке CMS и API.

После этого найдите и удалите вредоносный код, а главное — устраните причину проникновения: обновите уязвимый плагин, закройте дыру в коде, поправьте права на файлы. Простое восстановление из бэкапа без закрытия уязвимости приводит к повторному взлому в считанные дни. Завершите работу проверкой в Яндекс Вебмастере и Google Search Console и повторным сканированием.

Что даёт регулярная проверка сайта на уязвимости

  1. 01

    Защита клиентских данных и снижение риска утечек, штрафов и судебных споров

  2. 02

    Сохранение позиций в Яндексе и Google, которые падают при заражении и пометке «опасный сайт»

  3. 03

    Стабильная работа без внезапных простоев, рассылок спама и блокировок хостинга

  4. 04

    Экономия бюджета: исправить дыру заранее дешевле, чем восстанавливать сайт после взлома

  5. 05

    Доверие клиентов и партнёров, особенно если на сайте есть оплата и личные кабинеты

  6. 06

    Понятная картина состояния сайта и план его развития с учётом безопасности

Итоги: безопасность сайта — это процесс, а не разовое действие

Лучшая проверка на уязвимости — та, которая проводится регулярно, охватывает весь сайт и заканчивается исправлением найденных проблем.
  1. 01

    Проверяйте только свои ресурсы или те, на аудит которых есть письменное согласие

  2. 02

    Сочетайте автоматические сканеры, анализ CMS и зависимостей, ручной аудит и пентест

  3. 03

    Опирайтесь на OWASP Top 10 как на базовый чек-лист рисков

  4. 04

    Расставляйте приоритеты по критичности и обязательно перепроверяйте исправления

  5. 05

    Следите за разделами безопасности в Яндекс Вебмастере и Google Search Console

Начните с малого: составьте список всех компонентов сайта, запустите бесплатные OWASP ZAP и Nmap, обновите CMS и плагины. Затем закрепите график проверок и по мере роста проекта подключайте ручной аудит и пентест. Если нужна независимая оценка и конкретный план исправлений, лучше доверить это специалистам.

Часто задаваемые вопросы

Проверим ваш сайт на уязвимости до того, как это сделают злоумышленники

Получите отчёт с найденными рисками, приоритетами и понятным планом их устранения

Бесплатный предварительный аудитОтчёт с приоритетамиБез остановки сайта

Проверяем сайты на CMS и самописных движках

Политика конфиденциальности

При оставлении заявки на ресурсе «https://gurucontext.ru» пользователи предоставляют следующие сведения:

  • Имя
  • Контактный телефон или Telegram
  • Адрес сайта пользователя (не обязательно)

Также администрация сайта получает данные об IP-адресе посетителей, типе браузера, времени нахождения на сайте и прочие подобные сведения через сервисы статистики.

Использование информации

Вся полученная информация используется администрацией «https://gurucontext.ru» исключительно в целях связи с клиентом.

Защита персональных данных

Компания «https://gurucontext.ru» обязуется не разглашать сведения, полученные от пользователей, и хранит их в защищённом виде.

Предоставление данных третьим лицам

Полученные сведения не передаются третьим лицам, за исключением случаев исполнения обязательств перед клиентом (с его разрешения) и обоснованных требований закона.

Контакты

Телефон: +7 (499) 955-47-00.
E-mail: info@gurucontext.ru.