FlawOpen

flawopen.com/XSS/SVG アップロード

SVG アップロードは XSS のリスクになりますか?

リファレンスページ
要点

アップロードされた SVG は単なるピクセルではなく文書であり、スクリプトやイベントハンドラーなどのアクティブ要素を含められます。実行の可否はブラウザーでの表示コンテキストに依存します。<img> は制限された画像コンテキストですが、インライン、直接表示、文書としての埋め込みはアクティブになり得ます。

SVG が他の画像形式と異なる点

PNG や JPEG と異なり、SVG はアクティブコンテンツを含み得る XML です。ブラウザーは <img> など制限された画像コンテキストではスクリプトを無効にしますが、直接表示、<object>、<iframe>、<embed> で文書として埋め込む場合や、マークアップをインライン挿入する場合は異なります。アプリケーション自身の origin でアクティブな文書として配信すると、プロフィール画像が stored XSS になる可能性があります。挙動はコンテキスト依存であり、拡張子や MIME はサニタイズではありません。

アップロードを安全に扱う

よくある質問

拡張子や MIME タイプの検証だけで十分ですか?

['拡張子や MIME タイプの検証だけで十分ですか?', 'いいえ。拡張子と宣言された MIME はメタデータであり、アクティブコンテンツの検証ではありません。実際の形式を確認し、SVG 用 allowlist で無害化するか、SVG 機能が不要ならラスタ形式へ変換します。']

参考資料

関連項目 クロスサイトスクリプティング(XSS、CWE-79)の仕組みと各言語での防ぎ方 — flawopen.com Vue v-htmlのXSSリスクと安全な使い方 WKWebView loadHTMLString は未信頼コンテンツに安全? 反射型・格納型・DOM ベース XSS の違いは? Android addJavascriptInterface のセキュリティリスク Angular の XSS 対策:安全な既定動作とバイパス API MIME sniffing XSS:Content-Type と nosniff