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.confStrict-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で検知された他の脆弱性についても記事を今後書きます。参考になれば幸いです。
 
 
 
 
《関連記事》

X-Content-Type-Options nosniffの仕組みと設定方法
技術
2025.10.3(Fri)

Webセキュリティ強化!X-Content-Type-Options nosniffの仕組みと設定方法

#ツール

セキュリティ脆弱性テストのためのプロキシツール!Burp Suiteの使い方
技術
2023.10.4(Wed)

セキュリティ脆弱性テストのためのプロキシツール!Burp Suiteの使い方

#ツール

Apache Log4jの脆弱性の仕組みと対応の必要性
技術
2021.12.24(Fri)

【図解】Apache Log4jの脆弱性の仕組みと対応の必要性、攻撃有無の確認方法(CVE-2021-44228)

#Java

記事をシェア
MOST VIEWED ARTICLES