0

デジタル製品 (ビデオ、オーディオ、電子ブックなど) を不正なダウンロードから保護するには? 私は Apache サーバーと PHP/MySQL を使用しています。助けてください!

ありがとう!ポール G.

編集済み: 不完全な質問で申し訳ありません。私が望むのは、他のメンバーが、非メンバーにアクセスできるファイルへの直接ダウンロード リンクを共有しないようにすることです。デジタル製品をルート フォルダの外に格納することで実現できると聞いたことがありますが、PHP で正確に実装する方法がわかりません。

4

1 に答える 1

2

「ログインした」ユーザーのみが利用できるようにする必要があるファイルを保護しようとしていると思います...サイトに埋め込まれたファイルをダウンロードするのを止めようとしているだけなら、本当にあなたができることは何もありません。

したがって、承認されたユーザーにのみファイル アクセス/ダウンロードを許可しようとしているという前提で操作する場合、最善の策は、phpコントローラー ファイルを介して保護されたコンテンツのみを提供することです (それを と呼びましょうserve_file.php)。実際のファイルをパブリック ルート ディレクトリ (またはその他のアクセスできないフォルダー) の外に保存するか、ファイルをBLOBデータとしてMySQLテーブルに保存します。

次に、ユーザーがファイルをダウンロードしたい場合、取得しようとしているファイルを識別するデータserve_file.phpへのリンクが提供されます。_GET

http://mysite.com/serve_file.php?file_id=24、 例えば。

serve_file.phpスクリプトはデータを取得し、それ_GETが示しているファイルを特定し、権限テーブルをチェックして (または、ユーザーがログインしているかどうかを確認するだけで)、ユーザーがファイルを受け取る資格があるかどうかを判断します。そうであれば、(MySQL から、または を使用して) ファイル データを取得し、(提供しているファイルの種類に応じfile_get_content()て) 適切な情報を吐き出し、コンテンツを/ s します。headersprintecho

//check that the user is logged in (I'm assuming you have a function of this name)
if (!user_logged_in()){
   die('You do not have permission! Please log in');
}

/*see what file the user is trying to get... 
this is a very simple sample that can only get PDFs.
You should probably have a table with file details*/
$file_location = $_SERVER['DOCUMENT_ROOT'].'/../protected_files/file_'.intval($_GET['file_id']).'.pdf'
if (!is_file($file_location)){
   die('Could not get that file!');
}

$content = file_get_contents($file_location);
header("Content-Type: application/pdf");
header("Content-Length: ".strlen($content));
//add some more headers here, to deal with caching, etc
echo $content;
die();

設定したs は、ユーザーのブラウザに、送信してheaderいるデータをどのように解釈するか (たとえば、Content-Type: application/pdf脚本。

于 2013-05-09T22:21:24.107 に答える