我有一个个人投资组合网站,我有一些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文件的内容写入响应。