隐藏下载网址

时间:2013-07-08 18:46:24

标签: php javascript html

我正在尝试使可下载的PDF文档的URL对用户不可见,因此他们无法从其他任何位置访问它。我需要隐藏页面左下角(当鼠标悬停时)和浏览器地址栏中的URL打开时的URL。我需要它在所有浏览器上工作。

我的HTML看起来像这样:

<a href="http://www.example.com/files/pdf/a34501.pdf">View PDF</a>

链接应如下所示:

View PDF

原因是用户必须提供能够下载文档的代码,但如果他们能够看到URL,他们可以轻松下载其他人的文档(他们只需更改“a34501.pdf”部分中的数字) )。

我读过有关使用JavaScript函数加密URL或使用外部PHP文件的内容。但是,我不知道该怎么做。

感谢。

2 个答案:

答案 0 :(得分:6)

隐藏网址会让最不懂技术的用户感到困惑,但不是任何愿意下载文件且技术知识非常少的人,如果你需要隐藏你可以使用的代码(或支付墙)后面的文件一个PHP脚本,用于验证用户并吐出相应的文件,一个小例子是这样的:

if($validUser)
{
    $path = $fileName;
    $size = filesize($path);
    $fp = fopen($path, "rb");
    $content = fread($fp, $size);
    fclose($fp);

    header("Content-length: ".$size);
    header("Content-type: application/octet-stream");
    header("Content-disposition: attachment; filename=".$fileName.";" );
    echo $content;
}
exit();

这假设您在服务器中具有物理文件,但如果您在数据库或任何其他存储介质中具有这些文件,则可以对其进行修改。当然,您必须首先验证用户是否有权下载该文件,但这取决于您。

答案 1 :(得分:3)

您可以使用php脚本提供文档,同时仍允许php验证用户的会话信息等。

过程如下:

  1. 用户输入唯一代码(在验证用户所需的其他身份验证之后)。
  2. 生成唯一的文档链接,例如:http://domain/download.php?file=58afg71057ga82157(示例)
  3. download.php根据存储的会话信息验证用户请求 - 如果一切都检出,它会发送文件头()并传递文件内容。
  4. 这个basic file download tutorial提供了以这种方式提供文件的基础知识。您需要改进这个基础教程,但它应该让您了解该过程的工作原理。

    建议:

    • 每个用户使用一个唯一的“密钥”(允许同一用户重新下载);或者,
    • 一次性使用密钥,只允许单次下载;或者,
    • 要求用户身份验证,以便您知道是否“允许”使用密钥。
    • 不要使用“filename.ext”来查找要下载的文件,要么将名称存储在会话中,要么使用存储在数据库中的唯一标识符。
    • 不要只复制粘贴示例脚本,它们通常非常不安全。