2

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

我的 HTML 如下所示:

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

链接应如下所示:

查看 PDF

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

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

谢谢。

4

2 回答 2

6

隐藏 url 会使最不精通技术的用户感到困惑,但不会让任何愿意下载您的文件并且技术知识非常少的人感到困惑,如果您需要将文件隐藏在代码后面(或付费墙),您可以使用 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();

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

于 2013-07-08T18:57:54.740 回答
2

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

过程是这样的:

  1. 用户输入唯一代码(在验证用户所需的额外身份验证之后)。
  2. 生成唯一的文档链接,例如:(http://domain/download.php?file=58afg71057ga82157示例)
  3. download.php根据存储的会话信息验证用户请求——如果一切都检查出来,它会发送文件 header() 并传递文件内容。

这个基本的文件下载教程提供了以这种方式提供文件的基础知识。您将需要改进这个基本教程,但它应该让您了解该过程是如何工作的。

建议:

  • 每个用户使用唯一的“密钥”(允许同一用户重新下载);或者,
  • 一次性密钥,永远只允许一次下载;或者,
  • 要求用户身份验证,以便您知道是否应该“允许”他们使用密钥。
  • 不要使用“filename.ext”来定位要下载的文件,要么将名称存储在会话中,要么使用存储在数据库中的唯一标识符。
  • 不要只是复制粘贴示例脚本,它们通常非常不安全。
于 2013-07-08T18:57:45.967 回答