UbuntuのApache2のバージョン情報を隠す
[2024-01-28追記] このブログがLaravel 5.6でできてた頃の話です。
UbuntuのApacheはCentOSのと違って、設定ファイルが細かく分けられてる。どこかで見たけど、Debianの作法?らしい。
探してみると、それっぽいものがまとめて書かれた /etc/apache2/conf-available/security.conf
ファイル発見。このファイルからコメントを省くと、デフォルト設定は以下の通り。
このままだと…
ServerTokens
がOSだから、HTTPのレスポンスヘッダにApacheのバージョンとOS名が表示される。ServerSignature
がOnだから、エラーページ下部にApacheのバージョンとOS名とバーチャルホスト名とポート番号が表示される。TraceEnable
がOffだから、HTTPのリクエストメソッドのTRACE
は使えない。
TraceEnable
ってなんだろう? と思って調べたら、どうもHTTPのリクエストメソッドに TRACE
というのがあり、これとXSSを組み合わせるとリクエストヘッダを抜けるらしい。が、現在ではブラウザ側で対策されてる模様。
Apache2.4セキュリティ「HTTP TRACEメソッドを無効化しCross-SiteTracing(XST = クロスサイトトレーシング)対策を行う」
とりあえずバージョン情報などが表示されないように、以下の通りに変更。
ところで security.conf
には、他にも丸ごとコメントアウトされてる設定がいくつかあった。SVNが使ってるディレクトリにアクセスできないようになんてのもあったけど、以下2つは気になったので調べてみた。
Header set X-Content-Type-Options: "nosniff"
1つ目、レスポンスヘッダに [X-Content-Type-Options: nosniff
](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options) を付与する設定。
X-Content-Type-Options: nosniff つかわないやつは死ねばいいのに! - 葉っぱ日記
X-Content-Type-Options: nosniff はIE以外にも必要 - yohgaki's blog
これを付与しないと、IE8が Content-Type
だけでなく内容からファイルタイプを推論するせいで、XSSが起きるかもしれないらしい。
Header set X-Frame-Options: "sameorigin"
2つ目、レスポンスヘッダに X-Frame-Options: sameorigin
を付与する設定。
Webエンジニアだったら当然知っておきたい「 クリックジャッキング対策 」とは? | ヌーラボ
クリックジャッキングというものがあるとのこと。他のページから <iframe>
でこっそり自分のサイトを表示されることで、それをやられる危険がある。
そこで X-Frame-Options
ヘッダに sameorigin
を設定しておけば、同じドメイン内のページからしか <iframe>
で表示できないように制限でき、それを防げるらしい。
[2019-12-25追記] 自サイト内で <iframe>
使えなくなるのだとずっと誤解していたので、ここの文章修正した。
最終的な security.conf
は以下のようになった。
最後にApacheの設定をリロードして終わり。graceful
ならサービス止めずにリロードできる。
……と思ったらエラー!
mod_headers
を有効にしてなかった。