security.txtチェック
サイトを入力すると、セキュリティ研究者に問題の報告先を伝えているか、そのファイルが正しい場所にあり、書式が正しく、まだ期限内かがわかります。ファイルがなければ、下で作成できます。
security.txtを作成
該当する項目を入力し、結果をコピーしてください。ファイルはこのページ内で組み立てられ、入力した内容が当方に送信されることはありません。
メールアドレス、またはフォームのhttps://アドレス。個人ではなく共有メールボックスを使ってください。人は辞めていきます。
何をテストしてよいか、報告者が何を期待できるかを示すページです。
言語コードをカンマ区切りで入力します。
Canonical行を追加し、ファイルをそのアドレスに結び付けます。
初期値は今日から1年後で、標準が推奨する最長の期間です。
- テキストをUTF-8で、
security.txtという名前のファイルに保存します。 - サイトのルートにある
.well-knownというフォルダにアップロードし、https://your-domain/.well-known/security.txtで応答するようにします。 - 上のチェックを実行します。ファイルがHTTPS経由で
text/plainとして返ってくる必要があります。 - 有効期限をカレンダーに入れておきます。期限切れのファイルは放置されているように見えるので、ないよりも悪い状態です。
悪い知らせのための玄関
遅かれ早かれ、組織の外の誰かがあなたのサイトの不具合に気づきます。ほかの顧客の注文が見えるページ、忘れられた管理画面、繰り返し使えてしまうパスワード再設定などです。そうした人の多くは、あなたに知らせたいと思っています。難しいのは、誰に知らせればよいかを見つけることです。問い合わせフォームは営業部に届き、サポートのチャットは注文番号を求め、info@には誰も返事をしません。
security.txtファイルは、この1つの問題を解決します。決まったアドレス/.well-known/security.txtに置く数行のプレーンテキストで、報告の送り先と、その情報がいつまで有効かを書きます。この形式は2022年にRFC 9116として公開されました。スキャナー、バグバウンティのプラットフォーム、各国のセキュリティ機関は、伝えたいことがあるときにこのファイルを自動で読みます。
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のページなら、ファイルなしとみなします。知らないアドレスにはすべてトップページで答えるサイトが多いからです。
ファイルがあれば、3つの点で判定します。
| 部分 | 満たすべき条件 |
|---|---|
| 配信方法 | /.well-known/のアドレスで、HTTPSを使い、Content-Type: text/plainで配信されていること。別のドメインへのリダイレクトは指摘します。 |
Contact | 少なくとも1つあり、それぞれがURIであること:mailto:、https://、tel:。mailto:のない裸のメールアドレスはエラーです。 |
Expires | ちょうど1つあり、2027-01-31T00:00:00.000Zのような完全なタイムスタンプで書かれ、未来の日付であること。期限切れはエラー、残り30日未満または1年以上先は警告です。 |
| 任意の項目 | Encryption、Acknowledgments、Policy、Hiring、CSAFはhttps://のアドレスでなければなりません。Preferred-Languagesは1回だけで、言語コードを書きます。Canonicalには、ファイルを読んだアドレスが含まれていなければなりません。 |
標準にない項目名は、拡張が認められているので、減点せずに一覧にします。テキストがOpenPGPのクリアテキスト署名で包まれているかどうかも表示します。その署名の検証はしません。
よく見かける間違い
- 期限切れの日付
- 誰かが一度ファイルを書いて、そのまま忘れたケースです。RFC 9116は期限切れのファイルを使うべきではないとしているので、報告者はまた推測に戻ることになります。更新は2分で済みます:連絡先を確認し、日付を延ばし、公開するだけです。
Expiresがまったくない- 2022年より前に書かれたファイルは、この項目が任意だった草案に従っています。今は必須です。
Contact: security@example.com- 値はURIでなければなりません。
mailto:security@example.comと書いてください。 - ルートにしかファイルがない
/security.txtは予備の場所です。ファイルは/.well-known/に置き、古いアドレスからそこへリダイレクトしてください。- ほかのサイトからコピーした
Canonical - この項目があるのに、ファイルを配信しているアドレスが入っていなければ、ファイルは自己矛盾しています。
維持し続けられるファイルを公開する
まず、誰がそのメールボックスを読むかを決めます。特定の個人より、2人に届くsecurity@のような共有アドレスのほうが確実です。次に、このページの作成ツールを使います。必要なところにmailto:を付け、日付を整え、1年後に初期設定します。
できたものを、ウェブのルートにある.well-knownという名前のフォルダーにアップロードします。ほとんどのサーバーは、何も指定しなくても.txtファイルをtext/plainで送ります。ドットで始まるフォルダーを隠す設定になっているなら、例外を加えてください。nginxなら次のとおりです:
location = /.well-known/security.txt {
default_type text/plain;
charset utf-8;
}署名は任意です。GnuPGなら、gpg --clearsign security.txtで署名付きの版ができるので、元のファイルの代わりにそれを公開します。署名がアドレスも対象にするよう、署名する前にCanonicalの行を入れておいてください。
このページは1つのホストを1回読むだけです。連絡先のアドレスで誰かが返事をするか、リンク先のポリシーが存在するか、署名が本物かはわかりません。ファイルがないことはセキュリティ上の欠陥ではなく、ここでの評価も下げません。
よくある質問
security.txtがないのは脆弱性ですか?
いいえ。このファイルは報告をしやすくするための心づかいで、それ自体は何も守りません。自動スキャナーの中には、ファイルがないことを深刻度の低い指摘として挙げるものもあります。提案として受け止めてください。
security.txtは正確にはどこに置きますか?
https://your-domain/.well-known/security.txtに置き、HTTPSでプレーンテキストとして配信します。ホストはそれぞれ別なので、example.comのファイルはapp.example.comをカバーしません。
連絡先を公開すると、スパムや偽のバグ報告が来ませんか?
自動で送られてくる価値の低い報告はいくらか覚悟してください。たいてい報酬を求めてきます。何を対象とみなすか、報奨金を払うかどうかを書いた短いポリシーのページがあれば、ほとんどは振り落とせます。Contactをメールボックスではなくウェブのフォームに向けるのも効果があります。
Expiresの日付はどれくらい先にすべきですか?
RFCが勧めるとおり、1年より短くしてください。この日付は、最後にファイルを見直した時点で連絡先が正しかったという約束です。だから短くするものなのです。期限の1か月前にリマインダーを設定しましょう。
ファイルにPGPで署名する必要はありますか?
いいえ。署名があれば、乗っ取られたサーバーでファイルが書き換えられていないことを読み手が確かめられますが、それは公開鍵を別の場所から入手できる場合に限ります。署名のない有効なファイルはたくさんあります。
security.txtとrobots.txtの違いは何ですか?
どちらも決まったアドレスに置くプレーンテキストのファイルで、ソフトウェアが読みます。robots.txtはクローラーに、どのページに触れないでほしいかを伝えます。security.txtは、セキュリティの問題を見つけた人に連絡方法を伝えます。どちらも何かを強制するものではありません。