[英]Prevent file access on direct http
我的问题似乎与此处的其他问题类似,我尝试了一些,但似乎不适用于我的情况...
我已经开发了一个站点,您必须在其中填写表格,然后返回一个PDF文件,您可以下载或打印该文件,此文件已保存,以便以后检索
public_html
|_index.php
|_<files>
| |_file_001.pdf
| |_file_002.pdf
|_<asstes> ....etc
这就是我的文件和文件夹在服务器上的显示方式,任何人都可以轻松猜出其他文件.com/folder/file_00X.pdf
,其中X可以更改为任何其他数字并可以访问该文件...完成后用户脚本的形式返回一个URL .com/file/file_001.pdf
因此他/她可以单击它进行下载...
一年前,我做了类似的脚本来生成PDF,但是在那种情况下,用户需要电子邮件和通过电子邮件发送的代码才能生成PDF,而PDF却按需生成,但这种情况下并没有保存。 。
有没有办法保护当前的文件?
或者,我是否必须增加猜测的难度?
就像是。
.com/files/HASH(MD5)(MICROTIME)/file_(MICROTIME)_001.pdf
并将文件和文件夹名称保存在数据库中以便通过管理面板轻松访问,用户将必须通过电子邮件获取完整的网址...
任何想法将不胜感激。
为了全面安全起见,我会将PDF从公共文件夹中移出,并由脚本负责传递内容。 如果正确填写了表格,则可以生成一个临时哈希并将该哈希和pdf路径存储在数据库中。 这样,用户将可以通过检索器脚本以链接的形式访问文件,但是您将控制他可以使用该链接多长时间。
将PDF移到某些非公共文件夹(您的Web服务器可以访问,但公共文件夹不可以)。 或者,您可以使用.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
一般准则:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.