-1

ユーザーがログインするページがあり、購入したすべてのファイルが表示されます。

彼がファイルのダウンロードボタンをクリックすると、すぐにファイルがダウンロードされます。

問題:

ユーザーはリンクをコピーして友人に渡すだけで、誰もがこのファイルをダウンロードできます。

質問

ユーザーが自分のファイルをいつでもダウンロードできるようにダウンロードを保護するにはどうすればよいですか。

私の考え:

ユーザーがダウンロード リンクをクリックすると、リンクが生成され、ファイルがダウンロードされます。そのリンクは 10 秒後に即座に削除されます。

しかし、それで十分かどうか、安全でないか、またはそれを行う方法がまったくわからない..

何か案は?

4

3 に答える 3

2

これを行う 1 つの方法は、ファイルへの「直接」リンクを提供する代わりに、PHP スクリプトを介してプロキシすることです。ファイルがウェブルートのにあることを確認して、直接リンクを取得する方法がないようにしてください。PHP スクリプトはファイルにアクセスできますが、Web ブラウザーはアクセスできません。

ユーザーがリンクをクリックすると、スクリプトがログインしているかどうかをチェックし、ファイルへのアクセスが許可されているかどうかを確認します。ファイルにアクセスできる場合は、(正しいヘッダーを含む) ファイルをブラウザーに送信します。それ以外の場合は、エラーをスローします。

このようなもの:

<?php
session_start();

// Figure out if user is logged in and if they can download the file
if($_SESSION['loggedin'] && can_download($file)){
    header('Content-Type: '.mime_content_type($file));
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: no-cache');
    header('Content-Length: ' . filesize($file));
    readfile($file);
    exit;
}
else{
    header('HTTP/1.0 403 Forbidden');
    die('You are not allowed to access this file.'); 
}
于 2013-04-22T16:34:54.887 に答える