我的问题似乎与SO中的其他人类似,我尝试了一些,但它似乎在我的情况下不起作用......
我开发了一个网站,你必须填写一个表格然后它返回一个PDF文件,你可以下载或打印,这个文件保存,以便你以后检索它
public_html
|_index.php
|_<files>
| |_file_001.pdf
| |_file_002.pdf
|_<asstes> ....etc
这就是我的文件和文件夹在服务器上的外观,任何人都可以轻松猜出其他文件.com/folder/file_00X.pdf
,其中X可以更改任何其他数字并获取文件...用户完成后使用表单脚本返回一个网址.com/file/file_001.pdf
,以便他/她可以点击它下载...
一年前我做了类似的脚本生成PDF,但在这种情况下,用户需要电子邮件和通过电子邮件发送的代码,以生成PDF和PDF按需生成没有像这种情况那样保存......
有没有办法保护这些文件,因为它们现在是什么?
或者,我是否必须让它更难猜测?
类似的东西。
.com/files/HASH(MD5)(MICROTIME)/file_(MICROTIME)_001.pdf
并将文件和文件夹名称保存在数据库中,以便通过管理面板轻松访问,用户必须通过电子邮件获取完整的URL ...
非常感谢任何想法。
答案 0 :(得分:2)
为了获得完全的安全性,我会将PDF移出公共文件夹,并负责提交内容。如果表单填写正确,您可以生成临时哈希并将该哈希和pdf路径存储在数据库中。这样,用户可以通过检索器脚本访问该文件作为链接,但您将控制他将该链接可用多长时间。
答案 1 :(得分:1)
将PDF移至某个非公共文件夹(您的网络服务器可以访问但公众不能访问)。或者您可以使用.htaccess限制访问当前位置的pdf。
编写一个php脚本,根据http变量传递的内容返回正确的pdf。
您可以按照自己的方式保护/限制 例如,一个答案建议使用临时哈希。
限制访问的其他选项:
以下是使用最后一个选项的代码示例:
$hash_or_other_identifier = $_REQUEST["SomeVariable"];
if (!$_SERVER["HTTP_REFERER"])
{
//dont serve the file
} else {
//lookup the file path using the $hash_or_other_identifier
$pdfFile = somelogic($hash_or_other_identifier);
//serve the correct pdf
die(file_get_contents($pdfFile));
}
我甚至不认为保密文件名是非常重要的,如果您担心的是人们在URL栏中输入它,因为您只需检查它是否是直接链接。如果您还担心机器人或聪明人会创建指向您的文件的链接,使其看起来像推荐人,那么您将需要添加更严格的检查。例如,您可以验证引荐来源是您自己的网站。当然标题可能是欺骗性的,所以这一切只取决于它需要的防弹性。
网址类似于:http://yourdomain/pdf?SomeVariable=12345
但是,您不必使用http变量。您还可以使用具有相同结果的url片段,例如:http://yourdomain/pdf/12345
答案 2 :(得分:1)
一般准则: