拒绝通过HTTP访问所有的文件,除非
我创建一个PHP应用程序,我有一点很难找到对我有一个问题的解决方案在一定条件为真。我需要以某种方式完全拒绝任何人通过HTTP访问任何试图访问Web服务器上的文件(可能通过返回403 Forbidden错误或其他)的人,除非某些条件为真,这种情况将在每个连接的基础上进行检查。我需要找到最好的方法来做到这一点,我猜我需要在Apache中设置一些特殊的设置,我可以使用PHP进行修改,但这些Apache设置显然可以通过PHP进行配置。正如你所猜测的,我可以很好地编写PHP,但对于高级Apache配置没有经验。拒绝通过HTTP访问所有的文件,除非
我在想,也许如果我通过PHP使用chmod来更改验证用户的文件权限,并在连接关闭时让它们变回原位,但如果存在并发连接,则用户连接后缀无论它们是否有效,都将具有完全访问权限,但实际上可能只是绕过验证。但是,也许有更好的方法来做到这一点。
非常感谢您的帮助!
将您的文件放入目录并通过.htaccess停用http访问。然后写一个PHP脚本,检验条件,如果这是真的,那么通过PHP返回请求的文件是这样的:
<?php
define(DIR, "save_folder/");
$filename='the_file_to_show.pdf';
$fileextension= explode(".", $filename);
header("Content-type: application/$fileextension[1]");
header("Content-Disposition: attachment; filename=".$filename."");
header("Content-Length: ".filesize(DIR.$filename));
readfile(DIR.$filename);
?>
要把它放到你的.htaccess
<Directory ~ "save_folder">
Order allow,deny
Deny from all
</Directory>
有趣的是,这与我的代码看起来有多相似:D我想知道如果你能用.htaccess代码来帮助我更多。我尝试了RewriteRule ^(。*)$ - [F]'上的RewriteEngine,但是如果直接访问它们(至少使用谷歌浏览器),我仍然可以下载这些文件。我该怎么做? – 2010-10-08 00:33:01
只是编辑了我的答案,并附上了.htaccess – ITroubs 2010-10-08 00:39:37
@Ben的相关代码,如果您想告诉我们您正在谈论的是什么情况,有人甚至可能会为此提供一个.htaccess解决方案。 – 2010-10-08 00:46:06
这真的取决于“条件”,你要检查,但你不需要乱使用chmod。如果“条件”都与HTTP请求本身有关(即,根据请求的文件,查询字符串,IP地址访问等发送文件),那么您可以严格执行此操作.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
Rewrite Base/
RewriteCondition {...}
RewriteRule (.*) - [F]
</IfModule>
这将重定向到一个“禁止”头,如果他们匹配{...}
规定的条件。见This resource for some examples。
如果您需要更多的控制,或者如果您想根据更具体的(对于实例 - 发送一个403错误,如果他们还没有登录)的东西,拒绝文件,那么你要重定向到一个PHP脚本。
.htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
Rewrite Base/
RewriteRule (.*) parse.php
</IfModule>
parse.php:
if({conditions}){
header("HTTP/1.0 403 Forbidden"); // 403 error!
} else {
/* include() the file if it's PHP, otherwise just echo the file contents */
}
你说的是什么样的条件? – 2010-10-07 23:52:22