Проверил сайт строительной компании за 10 минут. Нашёл 5 дыр, через которые заявки уходят к конкурентам
Ниша с дорогим лидом: фундаменты, монолит, строительство под ключ. Никакого взлома. Только открытые данные, curl -I и просмотр HTML. Пять минут работы вскрыли картину, которую не показывает ни один коробочный аудит безопасности.
Что за сайт и почему это типично
Строительная компания из Иркутска. Стек сайта: WebSite X5 WebBuilder версии 12, jQuery 1.12.4, PHP-роутер. Собран в 2016–2018 году. Ниша с дорогим лидом, один звонок стоит от 3 до 15 тысяч рублей в контексте, так что потеря даже одной заявки оборачивается реальными деньгами.
Таких сайтов в России десятки тысяч. Строители, стоматологии, юристы, автосервисы. Сайт сделали «под ключ» в агентстве, и с тех пор на безопасность никто не смотрел. Не потому что не хотят. Просто не знают, куда именно смотреть.
Пять дыр за пять минут
-
1. Стек с публично известными уязвимостями.
jQuery 1.12.4: библиотека 2016 года с несколькими CVE по XSS. Риск тут не теоретический. Уязвимости задокументированы, эксплойты лежат в открытом доступе. Обновление до свежей версии закрывает проблему за полчаса, но никто не обновлял восемь лет.
-
2. Ноль security-заголовков.
Команда
curl -I https://сайт.ruпоказала пустой список: нетContent-Security-Policy, нетStrict-Transport-Security, нетX-Frame-Options, нетReferrer-Policy, нетPermissions-Policy. Браузер получает страницу без единой инструкции о том, что можно загружать, куда отправлять данные и можно ли встраивать сайт во фрейм. -
3. CSRF-токен один на все формы и не ротируется.
На сайте четыре формы обратной связи. Все используют один и тот же CSRF-токен, который не меняется между запросами. Значит, защиту от межсайтовой подделки запросов можно обойти автоматически: токен предсказуем.
-
4. Яндекс.Метрика с вебвизором пишет ввод форм.
В коде страницы стоит
webvisor: trueбез исключений для полей форм. Когда пользователь вводит телефон или имя в форму обратного звонка, запись экрана фиксирует каждый символ. Любой, кому дали доступ к Яндекс.Метрике (подрядчик, маркетолог, стажёр), видит эти данные в буквальной записи сессии. -
5. Шесть параллельных копий сайта.
Подкаталоги
/new,/novosibirsk,/zakaz,/zakaz2и ещё два: живые страницы с формами, которые индексируются Яндексом. Каждая из этих страниц работает как незакрытый дубль с теми же уязвимостями. SEO-каннибализация в подарок.
Рыночная цена вопроса завышена в 2–3 раза
Коробочные аудиторы называют цену закрытия этих дыр в 300–400 тысяч рублей. По честной декомпозиции работа стоит 140–240 тысяч: 2–3 недели на обновление стека, настройку заголовков, ротацию CSRF и исключение полей из вебвизора.
Разрыв в цене держится на простом: заказчик не понимает, что именно ему нужно, а подрядчик это не проясняет. Знаешь список конкретных задач — цена падает вдвое, а сроки втрое.
Три команды, которые покажут состояние вашего сайта
Не нужен подрядчик для первичной диагностики. Достаточно терминала или онлайн-инструментов.
-
Security-заголовки:
curl -I https://ваш-сайт.ru. Если нет строкStrict-Transport-SecurityиContent-Security-Policy, первые две дыры уже подтверждены. - Вебвизор и формы: откройте Яндекс.Метрику → Вебвизор → найдите запись с заполнением формы. Если телефон читается, его видит любой человек с доступом к Метрике.
-
Версия jQuery: откройте исходный код страницы (
Ctrl+U), найдите строкуjquery. Версия ниже 3.6 означает, что обновление обязательно.
Эти три проверки занимают десять минут и дают конкретный список задач для разговора с подрядчиком: с числами, а не с ощущениями. Подробнее о том, как я делаю технические аудиты сайтов, читайте в разделе кейсов.
Хотите знать, через что уходят ваши заявки?
Сделаю технический аудит сайта по открытым данным: security-заголовки, формы, стек, дубли. Конкретный список задач с ценами, без воды и без завышения.
Обсудить аудит →Или напишите напрямую: @kulievvb в Telegram