0

背景:私は人々が取引を保存できるウェブサイトを持っています。この取引の一環として、必要に応じて領収書を添付することができます。

質問:ユーザーが任意の種類のファイル拡張子を私のWebサイトにアップロードすることを許可されている場合、セキュリティ上のリスクはありますか?

情報:

  • ユーザーは、同じファイルを再ダウンロードする唯一の人になります
  • ユーザーがファイルを「実行」する機会はありません
  • 彼らはそれを彼ら自身にダウンロードして戻すことしかできません。
  • 他のユーザーが他のユーザーのファイルにアクセスすることはありません
  • 言うにはサイズ制限があります(たとえば2mb)

詳細:元々はファイルを「pdf / doc / docx」に制限しようとしていましたが、jpgや.xlsなどを保存したい人もいることに気づき、「したい」ファイルのリストに気づきました。店はかなり大きいです...

編集:ファイルはpublic_htmlの外部に保存され、ファイル名(パスではなく)を受け入れる「readfile()」関数を介して提供されます。したがって、readfile()を「混乱させる」ことができるものはありますか?

4

2 に答える 2

3

「ユーザーがファイルを「実行」する機会はありません」

それが当てはまると100%確信している限り、それは安全です。ただし、ファイルがWebサーバーで実行できないことを確認してください。たとえば、ユーザーが.phpファイルをアップロードする場合は、サーバーがそれを実行しないようにしてください。

コンピューターはそれ自体でプログラムを魔法のように実行するわけではないので、基本的には、ユーザーがサーバーをだましてファイルを実行させないようにする必要があります。これは、ファイルがWebルートの下にある場合は適切なハンドラーが無効になっていることを確認し、そうでない場合はプロキシスクリプトを介して渡すことを意味します(基本的echo file_get_contents('/path/to/upload')に他のロジックを使用)

別のオプションは、のようにファイルを保存することですname.uploadが、これには、保存名にマップする元の名前のリストを保持する必要があります。

于 2012-05-08T00:56:51.220 に答える
3

はい、予防策を講じない限り、これは間違いなくセキュリティ上のリスクです。たとえば、ファイルを再ダウンロードするには、に移動する必要がありますexample.com/uploads/{filename}。ユーザーが悪意のある PHP ファイルをアップロードし、example.com/uploads/malicious.php. もちろん、これにより PHP スクリプトがサーバー上で実行され、すべてを完全に破壊するのに十分な力が彼に与えられます。

これを防ぐには、ファイル名をパラメーターとして受け取るページを作成し、正しいcontent-type.

何かのようなもの、example.com/files?filename=malicious.php

于 2012-05-08T00:57:51.523 に答える