ApacheでHSTS(Strict-Transport-Security)を設定する方法|OWASP ZAP検出エラーを解消
目次
こんにちは。飯塚です。
システム開発の脆弱性検証として、OWASP ZAP を使うことがあります。検知された各脆弱性の理解のために記事にまとめました。
対応方法はシステムの要件によっても変わりますし、絶対に脆弱性を防げると保証できるものではない点はご了承ください。
OS・Apache・OWASP ZAPのバージョン
| 項目 | バージョン |
|---|---|
| OS | Debian GNU/Linux 12 (bookworm) |
| Apache | 2.4.XX |
| OWASP ZAP | 2.15.0 |
Strict-Transport-Security Header Not Set とは
MDNの解説が分かりやすかったので、そのまま引用します。
HTTP の Strict-Transport-Security はレスポンスヘッダーで(しばしば HSTS と略されます)、ブラウザーに、そのサイトは HTTPS を使用してのみアクセスすべきであり、今後 HTTP を使用してアクセスしようとした場合は自動的に HTTPS にアップグレードされるべきであるという情報を通知します。
要するに、HTTPではなくHTTPSでアクセスさせるように設定しなさい、という意味ですね。Transport は、Transport Layer Security(TLS)から取られた名称です。
参考
【MDN】Strict-Transport-Security
【ZAP】Strict-Transport-Security Header Not Set
Strict-Transport-Security の仕様をさらに詳しく知りたい方は下記をどうぞ。
RFC 6797
Strict-Transport-Security Header Not Set の対応方針
脆弱性のメッセージで指摘されている通り、Strict-Transport-Securityヘッダーを設定します。
サーバー上で HTTP から HTTPS への (301) リダイレクトを設定する方法もありますが、これだと中間者攻撃が起こりえるので注意が必要です。
ApacheでHTTPレスポンスヘッダーの「Strict-Transport-Security」を設定する
Apache のフォルダ構成
/etc/apache2
|-- apache2.conf
|-- /conf-available
|-- security.conf
Apache の対応
/conf-available/security.conf に Strict-Transport-Securityヘッダー を適切に設定します。以下、設定例です。
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains;"
max-age は、そのサイトに HTTPS だけで接続することをブラウザーが記憶する時間(秒)です。
なお、 Strict-Transport-Security ヘッダーがブラウザーへ送られるたびに、そのウェブサイトに対する有効期限が更新されるので、サイトはこの情報を更新して期限切れを防ぐことができます。
【MDN】ブラウザーは厳格トランスポートセキュリティをどう扱うか
設定ファイルの変更なので、設定を反映するには、Apacheの再起動が必要です。
systemctl restart httpd
まとめ
いかがでしょうか。
OWASP ZAPで検知された他の脆弱性についても記事を今後書きます。参考になれば幸いです。
《関連記事》
アシスタントリーダー Iizuka 技術の入門・まとめ系を中心に書いてます。あとで読み返したいと感じていただける記事を目指しています。


