查看您的文件,下载特定的购买文件,受保护的下载页面

时间:2013-04-22 16:27:46

标签: php

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

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

问题:

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

Qestion

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

我的想法:

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

但我不确定它是否足够好,不安全或根本不怎么做..

有什么想法吗?

3 个答案:

答案 0 :(得分: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.'); 
}

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

您可以为登录的用户创建会话ID,在数据库中跟踪它,并且只允许从具有匹配会话ID的用户下载..

OR

要求在页面上进行身份验证,只有经过身份验证的用户才能下载

OR

当用户购买/注册时,有一个表可以访问特定资源,只允许用户ID访问该资源进行下载

OR

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

只是一些想法。