2011-07-10 3 views
2

私は自分のファイルや画像をアップロードできるWebアプリケーションをPHPで作成していますが、所有者以外の人がこれらのファイルにアクセスすることを防ぐにはどうすればいいですか? dropboxについて考えてみましょう。これらのファイルを保護する仕組みは何ですか、私は検索しようとしましたが、これについては何も得ていません。任意のポインタやチュートリアルへのリンクは非常に便利です。前もって感謝します。ユーザーのみがアクセスできるようにユーザーのファイルを保護しますか?

+0

を使用することができます含めるオスロかもしれません

だけではなく、管理者がアクセスすることができますファイルの所有者によって。 – CodesInChaos

答えて

7

イメージとファイルをバイナリBLOBとしてデータベースに格納する場合は、ログインしたユーザーに対するアクセス許可をデータベースから取得して表示するだけです。

通常のファイルとして保存する場合は、Web上で公開されていないWebサイトのドキュメントルートの上に保存する必要があります。次に、データベースから正しい所有権をチェックした後(イメージの構造を知らないので、あなたが誰に所属しているかを入れ替えたものに置き換えます)、PHPはファイルを取得して、正しいヘッダでブラウザに送ります。例えば

、画像を表示する:

// Check permissions... 
// If permissions OK: 
$img = file_get_contents("/path/to/image.jpg"); 

// Send jpeg headers 
header("Content-type: image/jpeg"); 
// Dump out the image data. 
echo $img; 
exit(); 

あなたは、例えば、何の所有者を追跡するためのユーザーIDと一致するファイル名のデータベーステーブルを維持することができます。

+0

非常に徹底した説明です。ありがとう、1 upvote – bingjie2680

3

これを行うための一般的な方法でファイルを

  • をアップロードされたような...

    • ものだファイルはないアクセスID
    • インターネットからであるディレクトリに移動し、ファイルに対して生成され、データベースに格納されます。

    次に、ユーザーはIDを使用してサーバーからファイルを要求します。

    この目的のために、IDに基づいてファイルをデータベースに照会し、ユーザーがそのIDにアクセスできるかどうかを確認するスクリプトを作成します。ユーザーがアクセス権を持っている場合は、ファイルを読み取り、ユーザーのブラウザーに出力します。例えば

    、PHPでJPEG画像を読み込む:

    <?php 
    header('Content-type: image/jpg'); 
    readfile('/path/to/image.jpg'); 
    
  • +0

    あなたの答え、1 upvoteに感謝しますが、マイケルの答えはより完全です。私は彼を受け入れます。 – bingjie2680

    0

    ユニークで特別なファイル名を使用し、唯一のdisiredユーザーにそれらを提示。 あなたはまた、PHPでセッションを設定し、ファイルが含まれるようにセッションが正しいかどうかを調べることができます。 PHPにhttacces tioリダイレクトを使用します。

    <? 
    sessuion_start(); 
    file_exists($_SESSION['specialkey']_$_GET['realfilename']){ 
    include(/* include the file */); // or readfile 
    //or header location, but then the rteal URL will become visible 
    }else{ 
    die('acces denied'); 
    } 
    

    特殊ページは、表示ページを作るPHPページで設定され、eveyファイルで一意であり、DBから取得されます。 これは私が上手くやれる方法です。あなたがPHP

    編集 からのみaccesableあるディレクトリ内のファイルを保存する代わりに、あなたはDropboxのファイルではヤニ・ハーティカイナン方法

    +0

    イメージで 'include'を使うと、それらは表示されません。私は投票しませんが、それは良い答えではありません。 –

    関連する問題