Топ-10 уязвимостей на сайтах: чему нас научило сканирование тысячи проектов

Вы можете не верить в уязвимости — но это не мешает им существовать.

Когда мы запустили масштабное сканирование более тысячи сайтов (от лендингов и блогов до интернет-магазинов), результат оказался тревожным: ни один сайт не прошёл проверку без замечаний.

Самое удивительное — большинство ошибок не требуют “хакерского” ума. Это банальные вещи, о которых разработчики знают, но не делают «потому что и так работает».

Что показывают цифры

  • 92% сайтов не используют Content-Security-Policy (CSP).
    Это как оставить в квартире дверь открытой и надеяться, что вор не зайдёт.
    CSP задаёт белый список источников, откуда можно загружать скрипты. Без него внедрить вредоносный JavaScript — проще простого.

  • 88% не включают Strict-Transport-Security (HSTS).
    Этот заголовок заставляет браузер использовать HTTPS даже при ошибках ввода. Без него пользователи могут оказаться на фальшивой копии сайта.

  • 67% сайтов передают cookies без флага Secure.
    В открытой Wi-Fi сети такие cookies можно перехватить и авторизоваться под вашим логином.

  • 62% не задают Referrer-Policy.
    Это значит, что каждый переход на другой сайт раскрывает URL с параметрами. Иногда — включая токены и e-mail.
  • Половина сайтов не используют X-Frame-Options и Cross-Origin-Policies.
    А это защита от clickjacking и кражи данных между доменами.

Пример из практики

Во время аудита мы нашли корпоративный сайт, где можно было вставить iframe с подменённой кнопкой «Войти». Пользователь думал, что логинится в свою систему, а на деле отправлял пароль злоумышленнику. Один заголовок — X-Frame-Options: DENY — мог бы полностью предотвратить атаку. Добавить его занимает 10 секунд.

Как исправить

Минимальный набор, который должен быть у любого сайта:

Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header set X-Frame-Options "DENY"
Header set X-Content-Type-Options "nosniff"
Header set Referrer-Policy "strict-origin-when-cross-origin"
Header set Content-Security-Policy "default-src 'self';"

Добавьте это в конфигурацию сервера или .htaccess, и уже сегодня ваша защита станет в 10 раз крепче.

Вывод

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

Безопасность — это не продукт, а привычка.
Пора её выработать.