1

私は、ユーザーがファイルをアップロードできるシンプルなサイトを持っています (とりわけ明らかに)。私は自分自身でphp/htmlを学んでいます。

現在、サイトには次の特徴があります。 -- ユーザーが登録すると、ユーザーの名前でフォルダーが作成されます。-- ユーザーがアップロードしたすべてのファイルは、そのフォルダーに配置されます (重複の問題を回避するために、名前にタイム スタンプが追加されます)。-- ファイルがアップロードされると、そのファイルに関する情報が SQL データベースに保存されます。

簡単なもの。

それで、私の質問は、次のことを行うためにどのような手順を実行する必要があるかです。

  • アップロードされたファイルを Google がアーカイブしないようにします。
  • ユーザーがログインしていない限り、アップロードされたファイルにアクセスできないようにします。
  • ユーザーが悪意のあるファイルをアップロードできないようにします。

ノート:

B は自動的に A を達成すると思います。ユーザーが .doc および .docx 拡張子を持つファイルのみをアップロードするように制限できます。これは C に対してセーブするのに十分でしょうか? 私はそうではないと思います。

4

3 に答える 3

1

あなたがやりたいことはたくさんあり、あなたの質問はかなり広いです。

  • Google のインデックス作成では、/robots.txt を使用できます。ファイルに ACL (アクセス制御リスト) も適用するかどうかを指定しなかったため、それで十分である場合とそうでない場合があります。スクリプトを介してファイルを提供することはうまくいくかもしれませんが、コードを実行するようにだまされる可能性のある include、require、または類似のものを使用しないように十分に注意する必要があります代わりに、ファイルを開いて読み取り、ファイル操作プリミティブを介して提供する必要があります。

  • 「パストラバーサル」について読んでください。アップロードとダウンロードの両方でそれを回避したい(何らかの方法でファイルを提供する場合)。

  • 「悪意のあるファイル」の定義は非常に広いです。誰にとっての悪意?たとえば、自分の側がマルウェアの配布に使用されていることを心配している場合は、アップロードでウイルス対策を実行できます (実行する必要があります)。人々がサーバーに危害を加えられないようにしたい場合は、少なくとも、アップロードできるファイルの種類がたくさんあることを確認する必要があります。拡張機能と MIME タイプをチェックすることは始まりですが、それを信用しないでください (png にコードを埋め込むことができ、include() を介して含まれている場合は有効です)。次に、ユーザーが HTML コンテンツまたはそのように解釈されるものをアップロードできる場合、XSS の問題があります。content-disposition ヘッダーと非 html コンテンツ タイプを必ず提供してください。

それは始まりですが、あなたが言ったように、もっとたくさんあります。

于 2012-06-12T16:12:15.440 に答える
0

.phpあなたの最大の脅威は、人が拡張子(またはサーバー側のスクリプト/処理をもたらす他の拡張子)を持つファイルをアップロードすることに成功した場合です。ファイル内のすべてのコードは、Web サーバーが持っているアクセス許可 (構成によって異なります) を使用してサーバー上で実行されます。

アップロードの最終結果が、ファイルをダウンロードとして提供できるようにすることだけである場合 (誰かがブラウザでファイルを直接表示できるようにするのではなく)、ダウンロードを Web アクセスできない場所に保存することをお勧めします。ディレクトリに保存し、拡張子に関係なくダウンロードを強制し、何も実行しようとしないスクリプトを介してファイルを提供します ( http://php.net/headerを参照)。

これにより、ユーザーがログインしている場合にのみダウンロードを許可することがはるかに簡単になりますが、以前は.htaccessこれを実現するためにいくつかの魔法が必要でした.

于 2012-06-11T22:23:48.470 に答える
0

ファイルを利用可能にしたくない場合は、webserver-serving ディレクトリにアップロードしないでください。

X-Sendfile を使用することをお勧めします。これは、サーバーにファイルをユーザーに送信するように指示するヘッダーです。「fetch so-and-so file」と呼ばれる PHP スクリプトは、適切な認証を行い (既に何かがあると仮定します)、ヘッダーを返します。Web サーバーがファイルにアクセスできる限り、ファイルを提供します。

この質問を参照してください: Using X-Sendfile with Apache/PHP

于 2012-06-11T22:24:09.237 に答える