限制文件访问 – 只能通过PHP读取
我在
Windows平台上使用GoDaddy Web托管计划.这不是我的选择 – 它与使用ASP.NET的实际站点的不同部分有关(也不是我的选择).
我有一个SQL数据库,其中包含一些带有一些非敏感客户信息的条目.这个主键是一个AutoIncrement整数,我有一系列与这些整数相匹配的PDF文件(例如555.pdf,7891.pdf等). 我的目标是限制对这些文件的直接访问,我希望用户必须首先完成搜索和登录过程(PHP).最初我打算把文件放在PUBLIC_HTML文件夹上面,但GoDaddy拒绝在没有专用服务器的情况下给我root访问权限(每月20美元). 我接下来要研究的是HTACCESS.我打算通过仅允许访问服务器的IP地址(或localhost / 127.0.0.1)来限制只能访问PHP脚本的文件.不幸的是,这不起作用,因为GoDaddy不在其Windows服务器上运行Apache. 我可以将文件放入数据库中的BLOB中,但是当我需要快速处理它们时,这会非常混乱(加上我对这种方法有些麻烦). 是否有任何限制只能访问PHP脚本(readfile())的建议?
既然你不能把文件放在你的public_html目录中的任何地方,那么你将不得不采取恐惧/憎恨的“安全隐患”方法
>创建一个随机命名的子目录,将文件存储在:public_html / RANDOMGARBAGE中 的public_html / RANDOMGARBAGE / 5bf1fd927dfb8679496a2e6cf00cbe50c1c87145 下载 那么: <?php $fileID = (int)$_GET['fileID']; $crypted_file = sha1($fileID . 'some hard-to-guess salt text'); $full_path = 'public_html/RANDOMGARBAGE/' . $crypted_file; if (is_readable($full_path)) { if(user_is_allowed_to_see_this_file()) { /// send file to user with readfile() header("Content-disposition: attachment; filename=$ORIGINAL_FILENAME"); readfile($full_path); } else { die("Permission denied"); } } else { /// handle problems here die("Uh-oh. Can't find/read file"); } 这样用户永远不会看到你的“s00per seekrit”文件名是什么,他们只会看到他们的浏览器命中… php?fileID = 37并开始下载秘密文件.pdf 除此之外,您可以偶尔将特殊子目录重命名为其他内容,以及更改salt文本(然后需要使用新的sha1值更新所有散列文件名). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |