X-Content-Type-Options Header Missing
概要
- 脆弱性の名前: X-Content-Type-Options Header Missing (X-Content-Type-Optionsヘッダー未設定)
- 問題の要点:
X-Content-Type-Options
ヘッダーが設定されていないため、ブラウザがMIMEタイプを推測(MIMEスニッフィング)し、意図しないファイル形式として解釈されるリスクがある状態。 - よくある発生シーン: Webサーバーの設定がデフォルトのままになっている場合や、アプリケーションフレームワークが自動的にヘッダーを設定しない場合に発生しやすい。クラウド環境では、複数のサービスを組み合わせる際に、各サービスの設定が統一されていない場合に発生することがあります。
背景
X-Content-Type-Options
ヘッダーは、ブラウザにサーバーが指定したMIMEタイプを尊重させ、MIMEスニッフィングを無効にするためのセキュリティヘッダーです。MIMEスニッフィングとは、ブラウザがファイルの内容を解析してMIMEタイプを推測する機能のことです。
この機能が悪用されると、例えば、画像ファイルとしてアップロードされた悪意のあるスクリプトが、ブラウザによってJavaScriptとして実行される可能性があります。
X-Content-Type-Options
ヘッダーを設定することで、このようなリスクを軽減し、Webサイトのセキュリティを向上させることができます。
セキュリティ上のリスク
- クロスサイトスクリプティング(XSS)攻撃のリスク。
- 悪意のあるファイルが意図しない形式で実行される可能性。
- Webサイトの改ざん。
対処方法の具体例
Apache2
httpd.confでの設定
httpd.conf
または vhost.conf
に以下の記述を追加することで、X-Content-Type-Options
ヘッダーを設定します。
# httpd.conf または vhost.conf
<IfModule mod_headers.c>
Header set X-Content-Type-Options "nosniff"
</IfModule>
Nginx
nginx.confでの設定
nginx.conf
に以下の記述を追加することで、X-Content-Type-Options
ヘッダーを設定します。
# nginx.conf
server {
listen 443 ssl;
add_header X-Content-Type-Options "nosniff";
...
}
WordPress
.htaccessでの設定
.htaccess
に以下の記述を追加することで、X-Content-Type-Options
ヘッダーを設定します。
<IfModule mod_headers.c>
Header set X-Content-Type-Options "nosniff"
</IfModule>
functions.phpでの設定
functions.php
に以下のコードを追加することで、X-Content-Type-Options
ヘッダーを設定します。
<?php
// functions.php
add_action('send_headers', function() {
header('X-Content-Type-Options: nosniff');
});
PHP
PHPコードでの設定
PHPコード内で header()
関数を使用することで、X-Content-Type-Options
ヘッダーを設定します。
<?php
// PHPコード
header('X-Content-Type-Options: nosniff');
?>
JavaScript (Node.js / Express)
Express.jsでの設定
Express.js で helmet
ミドルウェアを使用することで、X-Content-Type-Options
ヘッダーを簡単に設定できます。
const express = require('express');
const helmet = require('helmet');
const app = express();
app.use(helmet.noSniff());
AWS
CloudFrontの設定
CloudFrontを使用している場合、カスタムヘッダーポリシーを設定し、X-Content-Type-Options
ヘッダーを追加します。
Load Balancerの設定
ロードバランサー(ALB/ELB)を使用している場合、HTTPヘッダーの書き換えルールを設定し、X-Content-Type-Options
ヘッダーを追加します。
検出方法
OWASP ZAP での出力例
- Alert 名: X-Content-Type-Options Header Missing
- リスク: Low
- URL:
X-Content-Type-Options
ヘッダーが設定されていないURL - パラメータ: なし
- 詳細: レスポンスヘッダーに
X-Content-Type-Options
が含まれていないという情報
手動再現例
- Webブラウザの開発者ツールを開き、Networkタブを選択します。
- Webサイトにアクセスし、HTTPレスポンスヘッダーに
X-Content-Type-Options
ヘッダーが含まれているか確認します。 curl
コマンドを使用して、HTTPレスポンスヘッダーを確認します。
curl -I https://example.com
まとめ
- CVSS 基本値: 4.0 (Medium)
- 運用チームや開発者が意識すべきポイント:
- Webサーバーの設定を確認し、
X-Content-Type-Options
ヘッダーを設定する。 - アプリケーションフレームワークの設定を確認し、
X-Content-Type-Options
ヘッダーを設定する。 - 定期的にWebサイトのセキュリティ診断を実施する。
- Webサーバーの設定を確認し、
- 再発防止:
- 開発プロセス全体でセキュリティを考慮する (Security by Design)。
- コードレビューを実施し、
X-Content-Type-Options
ヘッダーの設定を確認する。 - 自動脆弱性診断ツールを導入し、定期的にスキャンを行う。
- セキュリティに関するポリシーを策定し、遵守する。
補足資料・参考 URL
以上の対策と検出方法を活用して、X-Content-Type-Options Header Missing のリスクを低減してください。