-1

我有一个用户登录的页面,然后它显示了他购买的所有文件。

我想当他点击下载文件按钮时这样做,它会立即下载文件。

问题:

用户只需复制链接并将其传递给他的朋友,然后每个人都可以下载此文件。

问题

我如何保护下载,以便用户可以随时下载他的文件,但其他人不能,他们必须先购买。

我的想法:

当用户点击下载链接时,它会生成一个链接然后下载文件,该链接将在 10 秒后立即删除。

但我不确定它是否足够好,不安全或根本如何做到这一点..

有任何想法吗?

4

3 回答 3

2

一种方法是,通过 PHP 脚本代理它,而不是给出文件的“直接”链接。确保文件在 webroot之外,这样他们就无法获得指向它的直接链接。您的 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 回答
1

您可以使链接需要有效的登录会话,但这无关紧要,可能不会实现任何目标。

如果他想与他的朋友分享文件,他可以下载并通过 Skype 发送文件或上传到 4Shared。除了在文件上实施某种 DRM 之外,您所做的任何事情都不会阻止用户共享它。

于 2013-04-22T16:31:21.193 回答
0

您可以为登录的用户创建一个会话 ID,在您的数据库中对其进行跟踪,并且只允许从具有匹配会话 ID 的用户那里下载。

或者

页面需要认证,只有经过认证的用户才能下载

或者

当用户购买/注册时,有一个表允许他们访问特定资源,并且只允许访问资源的用户 ID 下载

或者

使用 AJAX 链接到检查上述任何内容的页面而不是直接链接,这样您就可以分发链接并仍然执行检查

只是一些想法。

于 2013-04-22T16:33:05.437 回答