👋

APIのXSS対策

2024/05/03に公開

「体系的に学ぶ 安全なWebアプリケーションの作り方 第2版」のAPIのXSS対策のメモ。

  1. MIME タイプを正しく設定する
  2. レスポンスヘッダ X-Content-Options: nosniffを出力する
  3. 小なり記号などを Unicode エスケープする
  4. XMLHttpRequest など CORS 対応の機能だけから呼び出せるようにする

1の設定は以下。

header('Content-Type: application/json; charset=utf-8');

2の設定は以下。

header('X-Content-Type-Options: nosniff');

3の設定は以下。

// JSON_HEX_TAG : <、> をエスケープ
// JSON_HEX_AMP : & をエスケープ
// JSON_HEX_APOS : ' をエスケープ
// JSON_HEX_QUOT : " をエスケープ
echo json_encode($arr, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT);

4の設定では、フロントエンドのリクエストヘッダーに
X-Requested-With : XMLHttpRequest
を含めるようにする。

API側では以下の処理でアクセスを制限する。

if (empty($_SERVER['HTTP_X_REQUESTED_WITH'])) {
    header('HTTP/1.1 403 Forbidden');
    die("不正な呼び出しです");
}

Discussion