6

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

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

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

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

注意: 1. 因为它是一个个人作品集网站,所以它没有任何“登录”
2. 我用 HTML 设计了网页作为响应代码

请您提出建议,没有 .htaccess 的任何方式吗?

4

4 回答 4

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); 

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

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

于 2012-10-30T20:03:44.310 回答
3

使用 MySQL 或 MySQLite - 根据您的偏好 - 并将 PDF 的链接存储在数据库中。然后使用诸如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 (下载.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()哈希比较。

于 2012-10-30T19:48:35.880 回答
3

遵循@rsmith84 的提示,但请确保阻止文件夹访问:

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')从受保护的文件夹中执行。

于 2012-10-30T20:02:56.377 回答
2

Create a php file say, download.php and link to that file instead.
You can check for correct password there, and if it's correct, you can write the contents of the PDF file to the response.

于 2012-10-30T19:45:58.227 回答