説明
サーバーがソフトウェアのバージョン、構成要素、デバッグメッセージなどの不要な内部情報をクライアントに公開すると、攻撃者が攻撃方法を選ぶ手掛かりになる可能性があります。
想定される影響
- 攻撃の準備: 公開された情報から、システムの弱点を探されるおそれがあります。
- 脆弱性の悪用: バージョン情報をもとに、既知の脆弱性を特定される可能性があります。
- 追加の侵害: 悪用可能な弱点がある場合は、システムやデータへの攻撃に情報を利用されるおそれがあります。
対処方法
- 応答ヘッダーやエラーメッセージに含めるサーバー情報を最小限にしてください。
- 本番環境ではデバッグモードを無効にしてください。
- サーバーとフレームワークの設定を確認し、不要な情報を公開しないでください。
例
アプリケーション設定の抜粋です。デバッグ応答と、サーバーやプロキシのバージョンヘッダーは別々に確認してください。DjangoのHTTPS/HSTS設定はHTTPSでの運用とSecurityMiddlewareの構成を前提とします。FlaskのREMEMBER_COOKIE_SECUREは、Flask-Loginのrememberクッキーに適用されます。
Django
変更前
python
# DEBUGを有効にしたDjango
from django.http import HttpResponse
def unsafe_view(request):
return HttpResponse("Hello, world!")
# settings.py
DEBUG = True
変更後
python
# DEBUGを無効にしたDjango
from django.http import HttpResponse
def safe_view(request):
return HttpResponse("Hello, world!")
# settings.py
DEBUG = False
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_HSTS_SECONDS = 3600
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
説明:
- 変更前: デバッグモードにより、エラー応答で内部情報が公開されるおそれがあります。
- 変更後: デバッグ用のエラー応答を無効にします。ほかの設定はHTTPSやクッキーを保護するもので、サーバーのバージョンヘッダーを自動的に削除するものではありません。
Flask
変更前
python
# DEBUGを有効にしたFlask
from flask import Flask
app = Flask(__name__)
app.config['DEBUG'] = True
@app.route('/')
def unsafe():
return "Hello, world!"
変更後
python
# DEBUGを無効にしたFlask
from flask import Flask
app = Flask(__name__)
app.config['DEBUG'] = False
app.config['SESSION_COOKIE_SECURE'] = True
app.config['REMEMBER_COOKIE_SECURE'] = True
@app.route('/')
def safe():
return "Hello, world!"
説明:
- 変更前: 有効なデバッグモードから内部情報が公開される可能性があります。
- 変更後: デバッグ応答を無効にし、HTTPS用のクッキー設定を適用します。バージョンヘッダーはWebサーバーとプロキシでも別途確認してください。
FastAPI
変更前
python
# デバッグモードを有効にしたFastAPI
from fastapi import FastAPI
app = FastAPI(debug=True)
@app.get("/")
async def unsafe():
return {"message": "Hello, world!"}
変更後
python
# デバッグモードを無効にしたFastAPI
from fastapi import FastAPI
app = FastAPI(debug=False)
@app.get("/")
async def safe():
return {"message": "Hello, world!"}
説明:
- 変更前: デバッグ応答によって内部情報がクライアントに伝わる可能性があります。
- 変更後: デバッグモードを無効にして、内部情報の公開を抑えます。