Проверка security.txt
Введите сайт и узнайте, сообщает ли он исследователям безопасности, куда сообщать о проблеме, и лежит ли этот файл в правильном месте, корректен ли он и не истёк ли его срок. Если файла нет, его можно составить ниже.
Составить security.txt
Заполните то, что подходит, и скопируйте результат. Файл собирается прямо на этой странице: ничего из введённого здесь нам не отправляется.
Адрес электронной почты или адрес формы https://. Используйте общий ящик, а не личный: люди уходят.
Страница, где сказано, что можно тестировать и чего автор сообщения может от вас ожидать.
Коды языков через запятую.
Добавляет строку Canonical, которая привязывает файл к его адресу.
По умолчанию через год от сегодняшнего дня: это максимальный срок, который рекомендует стандарт.
- Сохраните текст в файл с именем
security.txtв кодировке UTF-8. - Загрузите его в папку
.well-knownв корне сайта, чтобы он открывался по адресуhttps://your-domain/.well-known/security.txt. - Запустите проверку выше: файл должен приходить по HTTPS как
text/plain. - Внесите дату истечения в календарь. Просроченный файл хуже, чем никакого: он выглядит заброшенным.
Парадная дверь для плохих новостей
Рано или поздно кто-то со стороны замечает неладное на вашем сайте: страницу, где видны заказы других клиентов, забытую админ-панель, сброс пароля, который можно повторить. Большинство таких людей хотят вам сообщить. Сложность в том, чтобы найти, кому сообщить. Форма обратной связи уходит в отдел продаж, чат поддержки требует номер заказа, а на info@ никто не отвечает.
Файл security.txt решает именно эту проблему. Это несколько строк простого текста по фиксированному адресу /.well-known/security.txt: куда отправлять сообщения и до какого числа эти сведения действительны. Формат опубликован как RFC 9116 в 2022 году. Сканеры, платформы bug bounty и национальные агентства по безопасности читают файл автоматически, когда им есть что передать.
Contact: mailto:security@example.com
Expires: 2027-01-31T00:00:00.000Z
Preferred-Languages: en, de
Canonical: https://example.com/.well-known/security.txt
Policy: https://example.com/security-policyЧто читает эта проверка
Наш сервер запрашивает https://your-host/.well-known/security.txt, а если там ничего нет, то старый адрес /security.txt в корне. Перенаправления отслеживаются. Ответ со статусом 200, который оказывается HTML-страницей, считается отсутствием файла: многие сайты отвечают на любой неизвестный адрес своей главной страницей.
Если файл есть, мы оцениваем его по трём пунктам.
| Часть | Что должно выполняться |
|---|---|
| Как он отдаётся | По адресу /.well-known/, по HTTPS, с Content-Type: text/plain. Перенаправление на другой домен отмечается. |
Contact | Минимум одно поле, каждое в виде URI: mailto:, https:// или tel:. Голый адрес почты без mailto: это ошибка. |
Expires | Ровно одно, в виде полной метки времени, например 2027-01-31T00:00:00.000Z, в будущем. Истёкший срок это ошибка; меньше 30 дней в запасе или больше года вперёд это предупреждение. |
| Необязательные поля | Encryption, Acknowledgments, Policy, Hiring и CSAF должны быть адресами https://. Preferred-Languages встречается один раз и содержит коды языков. Canonical должен включать адрес, с которого файл был прочитан. |
Поля вне стандарта перечисляются без штрафа, поскольку расширения разрешены. Проверка также сообщает, обёрнут ли текст в подпись OpenPGP в открытом виде. Саму подпись она не проверяет.
Ошибки, которые мы видим чаще всего
- Истёкшая дата
- Кто-то однажды написал файл и забыл о нём. RFC 9116 говорит, что истёкшим файлом пользоваться не следует, так что сообщающему снова приходится гадать. Обновление занимает две минуты: подтвердить контакты, сдвинуть дату, опубликовать.
- Нет
Expiresвообще - Файлы, написанные до 2022 года, следовали черновику, где это поле было необязательным. Теперь оно обязательно.
Contact: security@example.com- Значение должно быть URI. Пишите
mailto:security@example.com. - Файл только в корне
/security.txtэто запасной вариант. Положите файл в/.well-known/и перенаправьте на него старый адрес.Canonical, скопированный с другого сайта- Если поле есть и в нём нет адреса, с которого отдаётся файл, файл сам себе противоречит.
Как опубликовать файл, который будет жить
Сначала решите, кто читает почтовый ящик. Общий адрес вроде security@, который доходит до двух человек, лучше личного. Затем воспользуйтесь генератором на этой странице. Он добавляет mailto:, где нужно, форматирует дату и заранее ставит её на год вперёд.
Загрузите результат в папку .well-known в корне сайта. Большинство серверов отдают файлы .txt как text/plain без дополнительной настройки. Если ваш скрывает папки, начинающиеся с точки, добавьте исключение. В nginx:
location = /.well-known/security.txt {
default_type text/plain;
charset utf-8;
}Подпись необязательна. С GnuPG команда gpg --clearsign security.txt создаёт подписанную версию, которую публикуют вместо исходной. Добавьте строку Canonical до подписи, чтобы подпись покрывала и адрес.
Эта страница читает один хост, один раз. Она не может сказать, отвечает ли кто-нибудь по контактному адресу, существует ли указанная политика и подлинна ли подпись. Отсутствие файла не уязвимость и здесь не снижает никакой оценки.
Частые вопросы
Отсутствие security.txt это уязвимость?
Нет. Файл это любезность, которая облегчает сообщение о проблемах, и сам по себе он ничего не защищает. Некоторые автоматические сканеры отмечают его отсутствие как находку низкой важности. Воспринимайте это как совет.
Где именно должен лежать security.txt?
По адресу https://your-domain/.well-known/security.txt, отдаваться по HTTPS как простой текст. Каждый хост отдельный, так что файл на example.com не распространяется на app.example.com.
Привлечёт ли опубликованный контактный адрес спам или фальшивые отчёты об ошибках?
Ожидайте некоторое количество автоматических малоценных отчётов, часто с просьбой о вознаграждении. Короткая страница политики, где сказано, что входит в рамки и платите ли вы вознаграждения, отсеивает большую их часть. Помогает и указание в Contact веб-формы вместо почтового ящика.
На какой срок ставить дату Expires?
Меньше чем на год вперёд, как рекомендует RFC. Дата это обещание, что контакты были верны на момент последней проверки файла, поэтому срок и должен быть коротким. Поставьте напоминание за месяц до него.
Нужно ли подписывать файл PGP?
Нет. Подпись помогает читателю убедиться, что файл не изменили на взломанном сервере, и работает она, только если ваш открытый ключ можно получить где-то ещё. Множество корректных файлов не подписаны.
Чем security.txt отличается от robots.txt?
Оба это текстовые файлы по известному адресу, которые читают программы. robots.txt говорит поисковым роботам, какие страницы не трогать. security.txt говорит людям, нашедшим проблему безопасности, как с вами связаться. Ни тот, ни другой ничего не навязывают принудительно.