web-dev-qa-db-ja.com

SVGファイルのアップロードでXSSを防ぐ方法は?

現在、アプリケーションを評価しているところ、JavaScriptを含むSVGファイルを送信できることがわかりました(このアプリケーションもXXEに対して脆弱です)。これらの脆弱性を防ぎ、SVG送信フォームを保護する方法はあるのでしょうか。すべての難読化メソッドが確実にキャッチされるようにするにはどうすればよいですか?

そもそも、ブラックリストアプローチを開発しましたが、セキュリティの観点からすると、非常に悪いアプローチです。何かアドバイスはありますか?

9
Nokosi Pow

この正確なトピックについて、セキュリティ研究者ロビン(@digininja)によって最近公開された this の素晴らしいブログ投稿をご覧ください。

  • Content-dispositionを使用した直接表示:添付ファイル-脆弱ではありません-ヘッダーが送信され、ファイルが強制的にダウンロードされます。

  • CSPの直接表示-脆弱性なし-コンテンツセキュリティポリシーはインラインJavaScriptを許可しないように設定されています。

  • 画像タグ-脆弱性なし-SVGは、スクリプトを防ぐ画像タグを通じて参照されます。

  • CSP付きのタグ-脆弱ではありません-イメージタグと二重の保護のための上記と同じCSP。

4
ThorTL67

@ ThorTL67はいくつかの完全に有効な解決策を指摘していますが、どれもには満足できず、それらは私には無責任だと思われます。

これは、SVG内の悪意のあるJSが引き続きビューアに送信されるためです。つまり、SVGファイルを保存して表示した場合でも、悪意のあるJavaScriptはデバイスで実行されます。これは、ほとんどのデバイスで、SVGを表示できるソフトウェアはブラウザだけであるためです。

これは、@ ThosTL67の回答の最初の点に特に当てはまります。

ここにいくつかの代替推奨事項があります:

  1. SVGを別の形式のサーバー側(PNGなど)に変換してから、新しい画像を表示できます。

  2. this one などのライブラリを使用してSVGをサニタイズできます。

0
undo