2011-06-29 16 views
1

私は、ユーザーがサーバーにファイルをアップロードできますが、そのファイルを他のユーザーと共有することはできないアプリケーション(LAMP)に取り組んでいます。だから、私の問題はPHPで制限されたファイルアクセスを実装する方法は?

私のアプローチはこれでユーザBによってアップロードされたファイルにアクセスすることができない利用者Aを確保し、安全なメカニズムを実装することです:

各ユーザーはそのファイルのフォルダ(/アップロードを持って
  1. /ユーザA)
  2. ユーザーがサブディレクトリ(/ユーザAにアクセスする権限を持っている場合、PHPスクリプト
  3. チェックへのアップロードフォルダ/へのすべてのアクセスをリダイレクトするように.htaccessファイルを追加します)

あなたが見ることができますこのアプローチではnyの欠点?もっと良い選択肢?

+0

私が考えることができる欠点の1つは、 '.htaccess'ファイルがかなり遅く、サーバーに課金されていることです。サーバ設定ファイルで設定するほうがはるかに良いでしょう。 – Nightfirecat

+0

ファイルへのハードリファレンスを作成するのではなく、 'download.php?id = 1234'のようなものを作成し、データベースから' 1234'をチェックするだけで、ユーザーがファイルをダウンロードする権限を持っているかどうかを確認できます。すべて。 –

+0

私は2番目の@Ahmetを追加し、ファイルを安全な方法で保存するための良い習慣は、あなたのドメインの外に(まだあなたのサーバー上に)保存することです。次に、download.php?id-1234を使用してファイルを呼び出します。 – GiladG

答えて

1

ファイルへのハードリファレンスを作成する代わりに、download.php?id=1234のようなものを作成し、データベースから1234をチェックするだけで、ユーザーがファイルをダウンロードする権限を持っているかどうか、そしてユーザーへの物理パスはまったく表示されません。

HTTPヘッダーを使用すると、必要なファイル名(データベースに保存されている)でファイルをダウンロードさせることができます。ユーザーが物理パスからファイルに直接アクセスできるようにすることはお勧めできません。それぞれの要求に応じて.htaccessでフックを作成しようとすると、実際にはより高価になります。

ほとんどのシステムでは、文字をランダムに変更して他の人のファイルにアクセスできないランダムな文字列やGUIDを生成することを検討しています。つまりFacebookの画像には../187170_697610597_4628627_q.jpgという複雑なURLがありますが、ユーザーが直接アクセスすることはできますが、数桁を変更することで別の画像URLを推測することはできませんが、それは難しいですが安全ではなく、

関連する問題