web-dev-qa-db-ja.com

データスキームをコンテンツセキュリティポリシーに含めても安全ですか?

一部の画像をbase64に変換するCordovaアプリがあります。これは、次のメッセージでCSPに違反します。

画像の読み込みを拒否しました 'data:image/svg + xml; charset = US-ASCII、%3C%3Fxml%20version%3D%221.0%22%20encod…E%3C%2Fg%...%3C%2Fsvg%3E '次のコンテンツセキュリティポリシーディレクティブに違反しているため:「default-src' self '」。 「img-src」は明示的に設定されていないため、「default-src」がフォールバックとして使用されることに注意してください。

この答え によると、data: Content-Security-Policyメタに追加しましたが、これが安全かどうか知りたいのですが。 data:はOriginを指定していないため、安全ではないのではないかと心配しています。

27
Martin Verner

これはすばらしい質問です。送信したリンクからソリューションを実装するのではなく、セキュリティの観点から時間をかけて考えることをお勧めします。

はい、あなたが恐れていたように、data: CSPディレクティブでは、XSSの脆弱性をデータとして開くことができるため、安全ではありません。任意のURIを処理できます。これは MozillaのCSPドキュメントに記載されています。

Data:ディレクティブを次のように変更することで、潜在的なXSS攻撃の危険領域を減らすことができます。

img-src 'self' data:image/svg+xml

ただし、ベストプラクティスとして、base64として提供されるイメージに関する根本的な問題に取り組み、CSPディレクティブの変更を必要としないように別の方法で実行できるかどうかを確認するよう努めます。

13
Herringbone Cat
  1. 参照されているデータプロトコルのホワイトリスト登録に関する注意 says

    data:data:URIをコンテンツソースとして使用できるようにします。 これは安全ではありません。攻撃者は任意のデータ(URI)を挿入することもできます。これは控えめに、絶対にスクリプトには使用しないでください。

    これは、images内のデータURIのリスクに固有の部分ではなく、画像内のデータURIがコードを実行できるという根拠のある証拠を見たことはありません最新のブラウザーでは、どのような点でも、XSSにページを気にしないでください。

    特定のコンテキストでは、SVG画像がJavascriptコードを実行できますが、これらは<iframe><object>などの子コンテキストであるか、 <embed>要素、またはホストDOMの直接の部分、つまり<svg>要素。

    MDNは explicitly を呼び出し、その<img>埋め込みSVGはJavascriptを実行できませんほかのいくつかのセキュリティ制限とともに、

    • JavaScriptが無効になっています。
    • 外部リソース(画像、スタイルシートなど)はロードできませんが、データ:URIを介してインライン化されている場合は使用できます。
    • :visited-linkスタイルはレンダリングされません。
    • プラットフォーム固有のウィジェットスタイル(OSテーマに基づく)が無効になっています。
  2. 緩和策として提案されているように、data:プロトコルホワイトリストステートメントの一部としてMIMEを指定することはできないようです。 MIMEタイプを制限できる唯一のコンテンツセキュリティポリシーディレクティブはplugin-typesで、<object><embed>のみを制限します( general CSP docs を参照)。 。

data-urisを使用する必要がなく、簡単に使用できる場合は、CSPを保持し、使用しないほうが簡単であるという点で、受け入れられた回答に同意します。ただし、画像を操作している場合、それは通常非常に困難です。

24
zemnmez