6

PHPでデジタルダウンロードを保護する方法を見つけようとしています。調査を開始できるように、一般的な指示が必要です。有用なものを見つけることができないようです。

ユーザーがファイルをダウンロードできるようにしたいが、ダウンロード フォルダーに直接アクセスできないようにしたい。また、ダウンロード リンクを一定期間または 1 回のダウンロードのみ利用できるようにしたい。

誰かが私を正しい方向に向けることができますか?

4

3 に答える 3

10

最善の方法は、チェック後にダウンロード管理を apache の mod に委任することです

x_sendfile

https://tn123.org/mod_xsendfile/

使用法:

<?php
...
if ($user->isLoggedIn())
{
    header("X-Sendfile: $path_to_somefile");
    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename=\"$somefile\"");
    exit;
}
?>
<h1>Permission denied</h1>
<p>Login first!</p>

基本的に、ヘッダー X-Sendfile を送信すると、mod がファイルをインターセプトし、ダウンロードを管理します (ファイルは仮想ホストの外にいつでも配置できます)。

それ以外の場合は、単純なファイル download.php を実装して、ファイルの ID を取得しreadfile、ログイン チェック後に内容を出力することができます。

于 2011-03-23T22:22:32.883 に答える
1

いくつかの例: Web サーバーのドキュメント ルートの外にファイルを配置したり、「すべて拒否」ルールを使用して .htaccess ファイルで保護されたディレクトリにファイルを配置したりできます。次に、正しいヘッダー (MIME タイプ、ファイルサイズなど) を設定してファイルを返すカスタム PHP 関数によってファイルを配信します。

MD5 または SHA1 ハッシュに基づいた一意の ID を持つリンクを作成できます。mod_rewrite ルールは ID を PHP ファイルにポイントし、データベースで ID を検索し、次のように時間チェックを行います。

example.com/downloads/73637/a8d157edafc60776d80b6141c877bc6b

に書き換えられます

example.com/dl.php?id=a8d157edafc60776d80b6141c877bc6b&file=73637

以下は、nginx と PHP で必要なことを行う例です: http://wiki.nginx.org/HttpSecureLinkModule

于 2011-03-23T22:29:12.323 に答える