您好,我希望为我的网站中的每个用户放置1个PDF文件。该文件具有用户ID.pdf,由phc生成。这大约是1500 PDF,并且每个ID按ID在每个用户中打开。问题是,如果其他用户更改为其他名称的链接可以看到其他PDF文件,那么他只需要使用正确的ID号即可。
您如何限制访问权限?
答案 0 :(得分:1)
这样的事情应该有所帮助:
我已将$current_user
定义为123
。显然,请更改此代码,以便根据当前正在处理身份验证的情况来准确设置此变量的值。
下一步是将所有PDF文件移动到不可通过网络访问的目录中。这意味着仅通过在地址栏中输入URL就无法访问PDF。
完成此操作后,请定义包含PDF文件的目录的路径$pdf_path
。
然后您可以转到script.php?user=123
。如果user
的值与$current_user
匹配,则PHP代码将获取适当的PDF文件,然后将其输出给用户。如果您尝试将user
的值指定为与登录时不同的值,那么您将看到错误消息。祝你好运..
<?php
$current_user = 123;
$pdf_path = '/home/pdfs/' . $current_user . '.pdf';
if($current_user == $_GET['user']) {
header('Content-Type: application/pdf');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=".$current_user.".pdf");
readfile($pdf_path);
exit;
} else {
echo "You do not have permission to access this file";
}
答案 1 :(得分:-1)
这里的问题是,您标识资源的方式可以通过更改URL进行枚举。甚至大型公司也已陷入这些“骇客”,因此很高兴您知道此问题并希望避免。
有两种处理方法。
6B86B273FF3...B7875B4B
似乎是随机的,但这只是SHA2-256哈希值“ 1”,攻击者会知道这一点。确定性哈希的优点是您可以随意计算它,而无需将其保存在任何地方。您可能不需要整个散列,其长度的50-70%肯定足够独特,因为从数学上讲,与它的冲突几乎是不可能的。无论哪种情况,都需要根据您的方案而不是用户ID来命名文件。