如何在网站上保护可下载的pdf文件的密码

D3v*_*ind 6 html php pdf download password-protection

我有一个个人投资组合网站,我有一些像pdf文件

<a href="file.pdf">Some file</a>
Run Code Online (Sandbox Code Playgroud)

我不希望每个人都下载该文件,我希望它用密码保护它,以便我只与我认识的人分享

只有提供正确密码的人才能下载我的文件

注意:1.由于它是一个个人投资组合网站,它没有任何"登录"
2.我设计的网页上有HTML作为响应代码

请你的建议,没有.htaccess的任何方式吗?

Hen*_*ker 7

您需要使用php文件通过pdf文件存储在NON PUBLIC文件夹中的方式来馈送文件。

例如,将您的pdf放置在非公共目录中,例如:/ home / pdfs /

而您的PHP脚本位于可访问的公共目录中,假设:/ home / public_html /

在公共目录中的脚本内放置:

if (isset($_GET('password')) {
die('wrong password');
}

if ($_GET['password'] != 'mypass') {
die('wrong password');
}

$file="/home/pdfs/test.pdf";
header("Pragma: public");
header('Content-disposition: attachment; filename='.$file);
header("Content-type: ".mime_content_type($file));
header('Content-Transfer-Encoding: binary');
ob_clean();
flush();
readfile($file); 
Run Code Online (Sandbox Code Playgroud)

使用GET值来确定要下载的文件,但是为了确保更好的安全性,只允许使用.pdf扩展名,去除所有其他句点和斜杠以防止它们遍历服务器目录并获得包含密码等的重要安全文件!为了更加安全,请仅使用字符az 0-9和-或_命名您的pdf文件

然后,当您希望下载文件时,请使用上述脚本的正确URL,并确保pdf文件位于非公共目录中。


rws*_*907 3

使用 MySQL 或 MySQLite - 根据您的喜好 - 并将 PDF 的链接存储在数据库中。然后使用诸如 download.php 之类的脚本。在数据库中存储该文件的密码,并要求用户在下载文件之前输入该密码。如果您不熟悉数据库,您可以使用 PHP 完成这一切。

一个非常粗糙的模型(没有数据库,如果您熟悉数据库,请相应调整)

HTML 表单

<form name="download" id="download" method="post" action="download.php">
  <input type="password" id="password" name="password" />
  <input type="submit" id="submit" value="Download" />
</form>
Run Code Online (Sandbox Code Playgroud)

PHP(下载.php)

<?php
     // Get the password
          $pw = md5($_POST['password']);

     // Compare against the stored password
          $valid_pw = md5("your password you want to use");

          if($pw != $valid_pw){
               echo "Error! You do not have access to this file";
          }else{
               header("Location: /path/to/your/file.pdf");
          }
?>
Run Code Online (Sandbox Code Playgroud)

笔记:

我使用了一种非常基本的方法来加密密码。如果这是我的应用程序,我会研究更好的方法,但为了简洁和易于理解,我使用了简单的md5()哈希比较。

  • 这是一些非常薄弱的​​保护,因为任何知道文件路径的人仍然可以访问。 (6认同)
  • 正如我上面所说,没有数据库的“非常粗糙”的模型。我不会浪费时间编写OP可能无法理解的东西。相反,我给了他一个简单的解决方案,他可以对其进行扩展。 (2认同)