我有一个用户登录页面,然后显示他已购买的所有文件。
我想在点击下载文件按钮时这样做,它会立即下载文件。
问题:
用户只需复制链接并将其传递给他的朋友,然后每个人都可以下载此文件。
Qestion
我如何保护下载,以便用户可以随时下载他的文件,但其他人不能,他们必须先购买。
我的想法:
当用户点击下载链接时,它会生成一个链接,然后下载该文件,该链接将在10秒后立即被删除。
但我不确定它是否足够好,不安全或根本不怎么做..
有什么想法吗?
答案 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链接指向检查上述任何内容而不是直接链接的页面,这样您就可以分发链接并仍然执行检查
只是一些想法。