20210528: X-XSS-Protectionについて追記
. .はじめに
どうもみなさん、私です。
せっかく技術ブログ初めてみたのだから何か良いネタないかなぁと考えていたところ
ありましたありました。本日業務中に思ったこと、書き連ねていきます。
掲題の通りになりますが、今回サーバーアプリケーションを特定(推測)するという内容になります。
あくまで推測、しかも今回はTomcat限定です。
.何が推測できるのか
「僕はいまTomcatから応答を受け取ったかもしれない」...ということが推測できます。
.何を見るべきか
HTTPのレスポンスヘッダには以下のセキュリティヘッダを付与することができます。
主なセキュリティヘッダ
X-Content-Type-Options:
=> ブラウザにContent-Typeを明示できる。
X-Frame-Options:
=> HTMLのフレームの動作を制限できる。クリックジャッキングの対策に。
X-XSS-Protection:
=> XSSフィルタに関するヘッダ、無効にしたい時に活躍する。
※詳細なオプションについては割愛。
これらのセキュリティヘッダは普通ページ単位で設定するのではなく、公開されているサービス全体でヘッダに出力するべきです。
さて、ならば公開されているサービスのどこにアクセスしても共通の設定をするのであればTomcatの場合はWeb.xmlに以下の様に追記をすると思います。
<filter> <filter-name>HeaderSecurityFilter</filter-name> <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class> </filter> <filter-mapping><!--ここから--> <filter-name>HeaderSecurityFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping><!--このあたり-->
上記をweb.xmlへ追記してTomcatを再起動してアクセスすればどのページにアクセスしても
HTTPのレスポンスヘッダに以下のヘッダが出力されます。
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
ヘッダのオプションについては以下を参照ください。
Apache Tomcat 8 Configuration Reference (8.5.66) - Container Provided Filters
org.apache.catalina.filters.HttpHeaderSecurityFilterクラスを利用すれば
メジャーな脆弱性に対してはフォローされるわけですね。
.このヘッダが実は
上でweb.xmlに追記したxmlですが、
各ヘッダを出力させたくない場合は以下の様にします。
<filter> <filter-name>httpHeaderSecurity</filter-name> <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class> <init-param><!--ここから--> <param-name>xssProtectionEnabled</param-name> <param-value>false</param-value> </init-param><!--ここに設定を追記--> </filter> <filter-mapping> <filter-name>httpHeaderSecurity</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
この場合はセキュリティヘッダを出力する設定を施してからxssProtectionEnabledを打ち消す設定を記述しているということです。
X-Frame-OptionはSAME-ORIGINで運用されているサービスはまだ多く見かけますが、
わざわざX-XSS-Protection:を打ち消すような設定を行うというのは公開されているサービスでは考えにくいのでweb.xmlでセキュリティヘッダを設定していればほぼデフォルトのままorg.apache.catalina.filters.HttpHeaderSecurityFilterクラスの出力を利用するかと思います。
※20210528追記
X-XSS-Protectionはモダンブラウザで非推奨になり、代わりにCSPでの制御が推奨値になる。あえて打ち消し設定を導入しているサービスもあるかもしれません。