👋
APIのXSS対策
「体系的に学ぶ 安全なWebアプリケーションの作り方 第2版」のAPIのXSS対策のメモ。
- MIME タイプを正しく設定する
- レスポンスヘッダ X-Content-Options: nosniffを出力する
- 小なり記号などを Unicode エスケープする
- 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