如何密码保护网站中可下载的PDF文件



我有一个个人投资组合网站,我有一些PDF文件,例如

<a href="file.pdf">Some file</a>

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

只有给出正确密码的人才能下载我的文件

注意:1。由于它是个人投资组合网站,因此没有任何"登录"
2.我已经用HTML设计了网页作为响应代码

请您提出建议,无论没有.htaccess ??

您需要使用php文件来通过将PDF文件存储在非公共文件夹中的位置。

例如,将您的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); 

使用get值确定要下载的文件,但是要确保更好的安全性仅允许.pdf扩展,剥离所有其他时期和斜线,以防止它们穿越服务器的目录并获得包含密码等重要的安全文件等!!!甚至更安全仍然只使用字符A-Z 0-9和 - 或_

来命名PDF文件

然后,当您希望下载文件将正确的URL下载到上面的脚本上时,并确保在非公共目录中存在PDF文件。

使用mysql或mysqlite-取决于您的喜好 - 并将链接存储到数据库中。然后使用诸如download.php之类的脚本。将文件的密码存储在数据库中,并要求用户在下载文件之前输入该密码。如果您不熟悉数据库,则可以在PHP中完成所有操作。

一个非常粗糙的模型(如果您熟悉DBS,请进行相应调整)

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>

php(download.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");
          }
?>

注意:

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

关注@rsmith84's 提示,请确保屏蔽文件夹访问:

apache .htaccess文件

Deny from all

iis web.config文件

<system.webServer>
    <security>
        <authorization>
            <remove users="*" roles="" verbs="" />
            <add accessType="Allow" roles="Administrators" />
        </authorization>
    </security>
</system.webServer>

然后,仅允许使用PHP文件交付。验证用户,然后从受保护的文件夹中进行readfile('/protectd/file/path')

创建一个php文件, download.php并链接到该文件。
您可以在那里检查正确的密码,如果正确,则可以将PDF文件的内容写入响应。

最新更新