web-dev-qa-db-ja.com

ファイル拡張子のないファイルアップロードを受け入れても安全ですか?

現在、ユーザーがデータファイルをアップロードして自動処理できるウェブサイトに取り組んでいます。セキュリティとユーザーガイダンスの両方の目的で、.txtや.csvなどの一般的なデータサフィックスのみを受け入れるように、クライアント側とサーバー側の両方に拡張ホワイトリストを実装しました。

送信された一部のデータファイルには、ファイル拡張子がまったく付いていないことがわかりました。

これらのファイルは、アップロード後にプロセスによって実行されません。テキストパターンが解析されます。したがって、検証されていないファイルをサーバー上に置いても、理論的には大きなセキュリティリスクはありません。ただし、処理されるデータはデータ保護法の対象となる個人データであるため、侵害は破滅的です。

このインスタンスは、ユーザーが拡張子なしでファイルをアップロードできるようにしても安全ですか?そして、より広い質問として、サイトがこれらのファイルを許可することを許可することはこれまでに良い習慣ですか?

3
Bob Tway

拡張自体は重要ではありません。代わりに、コンテンツについて知るためにMIMEタイプを把握することをお勧めします。

ファイルのアップロードに関するセキュリティリスクに関しては、 https://www.owasp.org/index.php/Unrestricted_File_Upload も参照してください。

1
Gambaz

サーバー側のチェックを行って、取得しているコンテンツが期待どおりであることを確認する必要があります。ファイルの内容を確認して、特定のビジネス要件に制限されていることを確認する必要があります。たとえば、誕生日のCSVをアップロードする場合は、ファイルに<script>タグを含めないでください。

DropBoxやそのようなサービスでない限り、サーバーにランダムなものを保存することは一般的に望ましくありません。その場合は、独自のサブドメインのサーバーにファイルを保存し、リモートでの実行とダウンロード、A/Vスキャンなどを制限するなど、特別な予防策を講じる必要があります。

これらのファイルは、アップロード後にプロセスによって実行されません。テキストパターンが解析されます。したがって、検証されていないファイルをサーバー上に置いても、理論的には大きなセキュリティリスクはありません。ただし、処理されるデータはデータ保護法の対象となる個人データであるため、侵害は破滅的です。

サーバーへの任意のファイルのアップロードを許可する場合、いくつかのリスクがあります。

  • スクリプトであり、サーバーが正しく構成されていない場合、アップロードされたファイルがサーバー側で実行される可能性があります。たとえば、Apacheを使用してPHPファイルをアップロードしますが、 DefaultType application/x-httpd-php またはForceType application/x-httpd-php inあなたの設定。
  • ローカルファイルインクルード攻撃 は、このファイルを呼び出す別のスクリプトまたはサービスを入手できる場合に可能です。
  • JSファイルの場合、ファイルをサーバーにアップロードし、XSS攻撃でリモートから呼び出すことができます。
  • エンドポイントスクリプト(bash、PowerShell)の場合、wgetcurlなどによってダウンロードされる別のスクリプトからポイントされ、実行される可能性があります。
1
Eric G

拡張子を追加しても、潜在的なファイルパーサーの脆弱性の問題は修正されません。ユーザーは、問題のないファイルの名前をcsv/txtに変更すると、ほとんど問題はありません。

すべての潜在的なリスクを書き留め、それらをクローズアップする必要があります。

  • ファイルの種類を確認してください。これを処理するモジュールが必要です
  • ツールを使用して、解析を実行する前に、CSVで潜在的な注入キーワードを検索します
  • SQLインジェクション防止のチートシート を確認します。
0
mootmoot