security.txt (RFC 9116) - текстовий файл за адресою /.well-known/security.txt, що повідомляє дослідникам безпеки, як повідомити про знайдену вразливість.
Без нього людина, що знайшла проблему, шукає контакти навмання: пише в загальну підтримку, в соцмережі - або не пише взагалі. Повідомлення губляться, а вразливість лишається відкритою.
Приклад:
Contact: mailto:security@example.com
Contact: https://example.com/security/report
Expires: 2027-10-01T00:00:00.000Z
Preferred-Languages: uk, en
Policy: https://example.com/security/policy
Acknowledgments: https://example.com/security/thanks
Canonical: https://example.com/.well-known/security.txt
Encryption: https://example.com/pgp-key.txt
Поля:
Contact(обов'язкове) - email, форма чи телефон для повідомлень; можна кілька;Expires(обов'язкове) - до якої дати інформація актуальна. RFC радить не більше ніж на рік уперед - щоб застарілий файл з неробочими контактами не вводив в оману;Policy- посилання на політику розкриття вразливостей: що досліджувати можна, а що ні, як ви реагуєте;Preferred-Languages,Acknowledgments,Encryption(ключ для зашифрованих повідомлень),Canonical- необов'язкові.
Практичні моменти:
- файл має бути доступний за HTTPS саме за шляхом
/.well-known/security.txt. Правила вебсервера чи WAF, що блокують «приховані» шляхи, мають робити виняток для/.well-known/; - у Laravel - статичний файл
public/.well-known/security.txtабо маршрут, що генерує його з актуальною датоюExpires; - адреса
Contactмає реально читатися - скринька, яку ніхто не перевіряє, гірша за її відсутність; - файл можна підписати OpenPGP, щоб підтвердити автентичність;
- нагадування про оновлення
Expires- інакше файл «протухне» через рік.
Це частина ширшої картини - політики розкриття вразливостей (VDP): security.txt лише вказує, куди писати, а процес реагування має існувати насправді.