Безопасность

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

Поверхность

Меньше поверхности для атаки: так задумано

Нет сервера, в который можно вломиться

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

Одна маленькая динамическая дверь, под охраной

Форма связи отправляет данные на единственный serverless-эндпоинт того же домена, который проверяет всё, что получает, не хранит данных и делает ровно одну работу. Держать динамическую поверхность настолько маленькой значит принять проектное решение, а не положиться на случай, и именно поэтому форма не может уронить остальной сайт.

Заголовки

Заголовки безопасности, которые вы можете прочитать сами

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

  • Настоящая Content Security Policy. Скрипты выполняются только с собственного домена сайта и от нескольких названных сервисов, которыми сайт реально пользуется; каждый inline-скрипт закреплён криптографическим хешем. Внедрённый скрипт браузер отклоняет ещё до выполнения.
  • Strict Transport Security. Браузерам предписано общаться с сайтом только по шифрованному соединению, навсегда, поэтому атаке на понижение протокола нечего понижать.
  • Без угадывания типов и без фреймов. Ответы объявляют свой тип и запрещают его переосмысление, а сам сайт нельзя загрузить во фрейм чужой враждебной страницы для кликджекинга.
  • Политика referrer, уважающая посетителей. Исходящие ссылки не разглашают полный адрес страницы, которую читал посетитель.
  • Закреплено набором тестов. Набор заголовков проверяется при каждом изменении, поэтому регрессия останавливает сборку, а не уходит в продакшен незаметно.

Формы

Защита формы в несколько слоёв

01

Человечность проверяется без трения

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

02

Проверяется там, где это имеет значение

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

03

Честный отказ

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

Почта

Заявка действительно доходит

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

Приватность

Приватно по умолчанию, секреты не в коде

  • Без трекеров, пока вы не попросите. По умолчанию не загружается ничего стороннего, а единственная аналитика, которую мы ставим, работает без cookie, а значит и без баннера согласия, загромождающего первое впечатление. Отсутствие можно проверить в панели сети прямо сейчас.
  • Посетители не товар. Сайт не собирает ничего сверх того, что посетитель сам вводит в форму, чтобы связаться с вами, и это уходит в ваш почтовый ящик, а не в маркетинговую базу.
  • Секреты никогда не живут в коде. Ключи и учётные данные хранятся в отдельном хранилище секретов и попадают на работающий сайт как переменные окружения. Ничего чувствительного не лежит файлом в репозитории, поэтому ничего чувствительного не утекает вместе с кодом.
  • Деплои оставляют след. Каждое изменение живого сайта проходит как проверенный коммит с зелёным прогоном тестов позади, а предыдущая версия остаётся в одном шаге, если что-то когда-нибудь понадобится откатить.
Начать проект сайта sales@wwi.dev

Попросите нас показать всё это на реальном развёртывании. Напишите через форму на сайте или на sales@wwi.dev.