Проверка security.txt

Запросите /.well-known/security.txt с сайта и проверьте его по RFC 9116: обязательные поля, срок действия, HTTPS и наличие подписи.

Зачем нужен security.txt

Когда кто-то находит уязвимость на вашем сайте, самое трудное часто — понять, кому о ней сообщить. security.txt (RFC 9116) — короткий текстовый файл по адресу /.well-known/security.txt, который отвечает на этот вопрос: строка Contact с адресом электронной почты или страницей для сообщений и строка Expires, которая говорит, до какого момента на эти сведения можно полагаться. Обе обязательны. Необязательные поля добавляют ключ шифрования, политику раскрытия, предпочтительные языки, канонический URL файла, ссылку на страницу благодарностей и вакансии в области безопасности.

Что проверяет этот инструмент

Он запрашивает https://<domain>/.well-known/security.txt, а если там файла нет — прежнее расположение /security.txt. Он проходит несколько редиректов и сообщает итоговый URL. Затем разбирает поля и отмечает то, чего требует RFC 9116: отсутствие Contact или Expires, больше одного Expires, дату не в требуемом формате, дату в прошлом, дату дальше чем через год, файл, отданный по обычному HTTP или с недействительным сертификатом, ссылки с http:, поле Canonical, которое не совпадает с URL, по которому файл найден, и наличие у файла подписи OpenPGP в формате cleartext.

Многие сайты на любой неизвестный путь отвечают главной страницей со статусом 200. Поэтому ответ в виде HTML считается «не найдено», а не сломанным security.txt. А если запрос не удался, результат — «не удалось проверить»: инструмент никогда не сообщает об отсутствии файла из-за тайм-аута.

Как сохранить файл полезным

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

Как пользоваться этим инструментом

  1. Введите домен. Введите или вставьте доменное имя, например example.com. Подойдёт и полный URL: схема, путь и начальное www будут отброшены.
  2. Получите файл. Инструмент запрашивает /.well-known/security.txt по HTTPS, а если его там нет, пробует /security.txt.
  3. Изучите замечания. Перечислены отсутствие Contact или Expires, истёкшая дата, обычный HTTP и состояние подписи, а также каждое найденное поле.

То же самое в командной строке

Та же проверка из терминала. В командах используется example.com: замените его своим именем.

  • Сам файлcurl -sL https://example.com/.well-known/security.txt
  • Код статуса и тип содержимогоcurl -sIL https://example.com/.well-known/security.txt | grep -iE "^HTTP|^content-type"
  • Проверить подпись подписанного файлаcurl -sL https://example.com/.well-known/security.txt | gpg --verify

Частые вопросы

Где должен находиться security.txt?

По адресу https://example.com/.well-known/security.txt, с отдачей по HTTPS как text/plain. /security.txt в корне сайта — устаревшее расположение; если вы его используете, настройте редирект на путь в .well-known.

Какие поля обязательны?

Contact (не меньше одного) и Expires (ровно одно, в формате 2027-01-31T23:59:59Z). Всё остальное необязательно.

Делает ли security.txt мой сайт безопаснее?

Нет. Он упрощает связь с вами, когда кто-то находит проблему, и это сокращает время, в течение которого уязвимость остаётся открытой. О безопасности сайта он ничего не говорит.

Нужно ли подписывать файл?

RFC 9116 рекомендует подпись OpenPGP в формате cleartext, чтобы сообщающий мог понять, что файл не подложил злоумышленник. Инструмент сообщает, есть ли блок подписи; саму подпись он не проверяет.

Инструмент пишет «не найдено», а в браузере я вижу страницу. Почему?

Вероятно, ваш сервер отвечает на неизвестные пути HTML-страницей со статусом 200. Это не файл security.txt, поэтому результат — «не найдено».