// DevOps

Security.txt: Почтовый ящик для баг-репортов, о котором вы забыли

Опубликовано 30.03.2026

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

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

Чтобы этого избежать, был принят стандарт RFC 9116 — файл security.txt. Это простой способ официально сказать миру: «Если вы нашли проблему, пишите сюда, мы вас услышим».


Что внутри?

Файл должен располагаться по адресу /.well-known/security.txt. Это текстовый UTF-8 формат, где каждая строка — отдельная директива.

  • Contact (обязательно): Ссылка на email или форму. Важно использовать формат URI. Допускается несколько контактов.
    • Contact: mailto:security@example.com
    • Contact: https://example.com/security-form
  • Expires (обязательно): Срок годности файла. По стандарту данные не должны считаться актуальными вечно. Рекомендуется обновлять его раз в год. Формат ISO 8601 (например, 2027-01-01T00:00:00Z).
  • Encryption: Ссылка на ваш публичный PGP-ключ. Это признак хорошего тона — давать возможность зашифровать отчет, чтобы детали уязвимости не перехватили по пути.
  • Preferred-Languages: Список языков, на которых вашей команде удобнее читать отчеты (например, ru, en).
  • Acknowledgments: Ссылка на страницу «Зала славы». Мелочь, которая отлично мотивирует исследователей — простое публичное «спасибо» за найденный баг.
  • Policy: Пожалуй, самое важное поле. Это ссылка на вашу политику разглашения (VDP).

Vulnerability Disclosure Policy (VDP): Как не напугать людей

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

Хорошая политика должна отвечать на три вопроса:

1. Что можно тестировать? (Scope)

Если область (scope) размыта — исследователь либо не пишет вам, либо рискует. Четко укажите домены: example.com, api.example.com. Явно исключите то, что трогать нельзя: staging.example.com, панели администратора или сторонние интеграции (Stripe, Cloudflare).

2. Что запрещено? (Rules of Engagement)

Установите границы. Базово это запрет на:

  • DoS / DDoS атаки.
  • Социальную инженерию против сотрудников.
  • Доступ к чужим данным или их удаление.

3. Что вы обещаете взамен? (Safe Harbor)

Это ключевой элемент доверия. Вы должны прямо заявить: «Мы не будем инициировать судебные разбирательства, если вы действуете в рамках этой политики и сообщаете об уязвимости ответственно».

Совет: Пишите человеческим языком. Фраза «Мы ценим ваш вклад и обязуемся ответить на отчет в течение 48 часов» работает гораздо лучше, чем десятистраничный отказ от ответственности.


Инструмент: securitytxt.org

Самостоятельно вымерять формат даты в ISO 8601 или следить за синтаксисом — лишняя трата времени. Для этого есть сервис securitytxt.org.

Это максимально простой генератор: вы заполняете поля, сервис проверяет их на соответствие стандарту и выдает готовый текст. Там же можно подготовить цифровую подпись (Cleartext Signature), чтобы гарантировать подлинность файла.


Техническая реализация

Просто создать файл — это полдела. Нужно, чтобы сервер отдавал его с правильными заголовками.

Настройка в Caddy

В Caddy можно прописать отдачу файла прямо в конфиге:

example.com {
    handle_path /.well-known/security.txt {
        header Content-Type "text/plain; charset=utf-8"
        respond "Contact: mailto:security@example.com
Expires: 2027-03-30T10:00:00Z
Policy: https://example.com/security-policy
Preferred-Languages: ru, en"
    }
}

Автоматизация через Ansible

Если у вас парк из десятка серверов, проще всего раскатать этот файл одной задачей:

- name: Ensure .well-known directory exists
  file:
    path: /var/www/html/.well-known
    state: directory
    mode: '0755'

- name: Deploy security.txt to all web nodes
  copy:
    dest: /var/www/html/.well-known/security.txt
    content: |
      Contact: mailto:security@example.com
      Expires: 2027-12-31T23:59:59Z
      Policy: https://example.com/security-policy
      Preferred-Languages: ru, en
    mode: '0644'

Итог

Security.txt — это не «защита от взлома». Это страховка от того, что о критической дыре вы узнаете последним. Настройка занимает 10 минут, но она переводит ваши отношения с сообществом безопасности из плоскости «враги и нарушители» в плоскость «партнеры».

Это правило хорошего тона для любого серьезного проекта в 2026 году.

// Reviews

Отзывы по теме

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

Было несколько проблем касаясь как технической части так и понимания в целом. Михаил быстро ответил на запрос, помог разобраться и решил проблеммы технические и помог разобраться в понимании, за что отдельное спасибо. …

abazawolf

Настройка vps, настройка сервера

18.02.2026 · ★ 5/5

// Contact

Нужна помощь?

Свяжись со мной и я помогу решить проблему