web-dev-qa-db-ja.com

ユーザーがコンテンツを自分のサイトにアップロードできるようにすると、どのようなセキュリティ上のリスクがありますか?

Webデザイナー(セキュリティの専門家ではない)として、ユーザーにWebサイトへのコンテンツ(ビデオ、画像、テキストファイル)のアップロードを許可する場合、実際のリスクは何ですか?

32
Edgar

サイトへのコンテンツのアップロードを許可することにはいくつかのリスクがありますが、それらがどれほど重要であるかは、設計しているサイトがどのように機能するかによって異なります。

まずマルウェアのアップロードです。攻撃者がサイトにマルウェアをアップロードでき、そのマルウェアがユーザーによってダウンロードおよび実行される場合、それはおそらく問題です。通常、これを防ぐには、アップロードできるファイルの種類を制限し(ここでファイル拡張子だけに頼るべきではないことに注意してください)、アップロードされたコンテンツでマルウェアスキャンを使用する必要があります。もちろん、スキャン側では既知のシグネチャのみを停止し、かなり簡単にバイパスできます。

2番目の潜在的な問題は、アクティブなコンテンツをアップロードでき、それをアプリケーションで実行できるかどうかです。たとえば、サイトでphpを使用している場合、phpスクリプトをアップロードして、アプリケーションの一部として実行させると、サーバーを制御したり、少なくとも存在する他の情報にアクセスしたりできるようになります。アプリで。

これに対処するために私が見た1つのアプローチは、アップロードされたファイルがWebルートに配置されないようにし、Webサーバーがその場所からファイルを実行しないようにすることです。

3番目のリスクは、ユーザーが「違法な」素材をアップロードしたことです。これは、ソートするのが難しい法的問題になる可能性がありますが、ユーザーが生成したコンテンツを許可すると、遅かれ早かれそれを処理しなければならなくなる可能性があります。これに対する修正は、主に手続き型のようです。ホスティング会社やISPと良好な関係を築き、リクエストがあった場合にコンテンツを削除する必要がある管轄区(DMCAリクエストなど)でホスティングしている場合は、コンテンツを迅速に削除するリクエストに応答できることを確認してください。 )。

27
Rory McCune

サーバーが適切に構成されていないと、サーバーのコンテキストで悪意のあるコードが実行され、ファイルが制御される可能性があります。その一例はよく知られていますPHPバックドアc99Shell。この機能をより安全にするための推奨事項はいくつかあります:

  1. 他のドメイン(またはサブドメイン)を使用して、ユーザーがアップロードしたファイルを保存する
  2. ユーザーがサーバーが実行するファイルのタイプをアップロードできないことを確認してください(コンテンツタイプを確認するか、言語固有のツールを使用してファイルのコンテンツを読み取り、正しいMIMEタイプを確認してください)
  3. アップロードしたファイルに実行権限がないことを確認してください。
  4. 他のユーザーにファイルのダウンロードを許可する場合、Content-Disposition HTTPヘッダーを使用して添付ファイルとして強制すると便利な場合があります
9
bretik

FileIncludeはWebサイトの最悪のセキュリティホールの1つです。C99シェル(これまで見た中で最悪のphpスクリプトの1つ)がサイトにアップロードされた場合にどうなるかを考えて実行してください。

1

攻撃者は、認証を破ったり、.exeファイルをアップロードしたりする可能性のある悪意のあるコードをアップロードできます。他のユーザーがこのようなファイルを開くと、セキュリティ上の大きな問題が発生し、システムのパフォーマンスが低下する可能性があります。

0
Irfan

セキュリティの観点から-適切なスクリーニングなしでユーザーがあらゆる種類の実行可能ファイルをアップロードできるようにすることは大きなリスクです。経験則は-

  • ユーザーがアップロードしたコンテンツをWebディレクトリのユーザーがアクセスできる場所に配置しないでください。
  • ユーザーがサーバー構成ファイルをアップロードできないようにします。 (場合によっては、ユーザーはphpファイルのアップロードを制限しますが、.htaccessのアップロードは許可します:))

PHPスクリプトのアップロードを許可せずにSSIをアップロードして実行できるようにすることを試みているサイトを見たことがあります。

0
kiran