グーグルから、ファイルアップロードの脆弱性の多くは、ファイル名に何かを挿入することに依存し、サーバーに保存されている画像にも依存します。画像のコンテンツの投稿リクエスト(file-contents: ‰PNG......
via post request)を行うだけで安全です。 )次に<img src="data:image/png;base64,.....> ?
のようにブラウザに表示します
間違いなく!
ファイルのアップロードは非常にトリッキーになる可能性があり、うまくいかないことがたくさんあります。 (少なくとも)2つの追加の手順を実行する必要があります。
PNGのみが必要な場合は、ファイルが実際にPNGであることを確認する必要があります。明確にするために、ここでは拡張子を確認しても意味がありません。実際のファイルの内容を確認する必要があります。これを行わない場合は、さまざまなレベルの重大度のいくつかの潜在的な攻撃にさらされます。
ファイルが有効なPNGであることを確認しても、攻撃者がファイルのアップロードを使用してスクリプトをアップロードおよび実行するのを阻止するには十分ではない場合があります。特に、ほとんどの画像形式では、ヘッダー内のコメントとメタデータを使用できます。これらのコメントに実際のコードを挿入することは可能であり、許容的に構成されたサーバーの場合、攻撃者はサーバーをだまして実行する可能性があります。 ほとんどデフォルトの構成を備えた最新のサーバーはこのような攻撃の影響を受けませんが、このような攻撃は可能であり、確実に発生しています。
上記の攻撃を軽減する最も簡単な方法は、アップロードしたファイルを別の場所でホストすることです。最近のほとんどのクラウドプロバイダーには、このための完全なユースケースであるバケットがあります( [〜#〜] aws [〜#〜] 、 [〜#〜] gcp [〜#〜] 、 Azure )ですが、静的ファイルのみを提供する別のドメインの別のサーバーでいつでも自分で管理できます。アップロードされたファイルを別のドメインでホストすることで、CSPバイパスのリスクをスキップし、ファイルをコードとして扱うことができないサーバーでホストすることで、RCEのベクターの欠落を心配する必要がなくなります。要するに、アップロードされたファイルをすぐに別のシステムに転送することで、安全のためにそれらをサンドボックスに入れます。