Server
使い方
サーバーは、リクエストを処理しているソフトウェアと任意のバージョン情報を示すために Server ヘッダーを含めます。値は User-Agent リクエストヘッダーに似た製品トークン形式に従い、1 つ以上の製品名が並び、それぞれに任意でバージョンとコメントが続きます。
Server に含める詳細度は運用環境によって異なります。具体的なソフトウェアのバージョンを明かすことはセキュリティリスクになります。攻撃者は、特定バージョンの Web サーバー、フレームワーク、オペレーティングシステムに存在する既知の脆弱性を探してスキャンします。詳細な Server ヘッダーは、この偵察作業を容易にしてしまいます。
注意
Server ヘッダーでバージョン情報を明かすことは、既知の脆弱性を探してスキャンする攻撃者を助けます。本番環境では、値を汎用的な製品名に限定するか、ヘッダー自体を削除することが有効です。
このリスクを緩和する一般的な方法は次のとおりです。
ほとんどの Web サーバーは、Server ヘッダーの値を制御する設定オプションを提供しています。nginx は server_tokens ディレクティブを使います。Apache は ServerTokens と ServerSignature を使います。リバースプロキシや CDN は、オリジンサーバーの値を自身の識別子で上書きすることがよくあります。
product
サーバーソフトウェアを識別する 1 つ以上の製品トークンです。各トークンは、任意でスラッシュで区切られたバージョンと、括弧内のコメントを含みます。
Server: <product>/<version> (<comment>)
複数の製品はスペース区切りで現れ、重要度の高い順に列挙されます。
例
最小限のレスポンスは、バージョン番号を露出せずにサーバーソフトウェアを示します。これは本番環境で推奨される方法です。
Server: nginx
バージョンの詳細やオペレーティングシステムの情報を含めるサーバーもあります。この形式は、バージョンを狙ったスキャンに対してより広い攻撃面を露出させます。
Server: Apache/2.4.57 (Ubuntu)
CDN やクラウドプラットフォームは、オリジンサーバーの値を自社の製品名に置き換えることがよくあります。
Server: cloudflare
独自の値や意図的に曖昧な値にすることで、基盤の技術スタックを隠せます。
Server: webserver
設定
本番環境での情報漏えいを減らすため、Server ヘッダーを抑制するか最小限にします。
nginx:
server_tokens off;
これにより値はバージョン番号のない nginx になります。ヘッダーを完全に削除するには headers-more モジュールが必要です。
more_clear_headers Server;
Apache:
ServerTokens Prod
ServerSignature Off
ServerTokens Prod は値をバージョンやモジュールの詳細を含まない Apache に縮めます。ServerSignature Off はエラーページからサーバー情報を取り除きます。
IIS:
URL Rewrite のアウトバウンドルールでヘッダーを削除するか、applicationHost.config で removeServerHeader=“true” を設定します(.NET 8+)。