alt*_*ape 10 php pdf iis restrict
我在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中
确保目录不可浏览.禁用目录浏览(如果可以),并在其中放置默认文档(index.html?),因此即使启用了浏览,您也无法获得目录列表.
不要使用可猜测的名称存储文件.不是将它们与数据库ID一起存储,而是使用盐渍+散列名称存储它们:( $crypted_filename = sha1($real_filename . 'some hard-to-guess salt text');
当然,如果需要,请将其设置得更复杂).将原始文件名存储在数据库中.所以你最终得到的结果如下:
public_html/RANDOMGARBAGE/5bf1fd927dfb8679496a2e6cf00cbe50c1c87145
public_html/RANDOMGARBAGE/7ec1f0eb9119d48eb6a3176ca47380c6496304c8
通过PHP脚本提供文件 - 永远不要直接链接到散列文件名
下载
那么:
<?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");
}
Run Code Online (Sandbox Code Playgroud)
这样用户永远不会看到你的"s00per seekrit"文件名是什么,他们只会看到他们的浏览器命中...php?fileID=37
并开始下载secret file.pdf
除此之外,您可以偶尔将特殊子目录重命名为其他内容,并更改salt文本(然后需要使用新的sha1值更新所有散列文件名).
归档时间: |
|
查看次数: |
7121 次 |
最近记录: |