使用PHP / Apache限制对图像的访问
首先,我知道这不是一个新主题,甚至是讨论过的重复,但我想提出一个新的方法,我不知道如何实现:
我的想法如下:
步骤:
我不确定如何在第3步和第4步之间建立正确的链接。不确定如何做到这一点。
我不确定PHP可以使用哪种机制来设置apache环境变量或类似的东西。
任何输入都将不胜感激。
代码示例:
.htaccess
RewriteEngine on
RewriteCond %{ENV:AUTHORIZED} !^$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ access.php [L]
access.php
if ( 1 == 1 /* check if user is authorized*/ ) {
// set an environment variable for apache!!!
apache_setenv( 'AUTHORIZED', "true" ); //not working!
//forward the request
header( "Location:" . $_SERVER[ 'REQUEST_URI' ] );
exit;
} else {
header("HTTP/1.1 401 Unauthorized");
exit;
}
一些参考文献:
Using PHP/Apache to restrict access to static files (html, css, img, etc)
答案 0 :(得分:0)
我不确定如何在第3步和第4步之间建立正确的链接。不确定如何做到这一点。
这不是,至少在实践中并非如此。 HTTP是无状态的。
我不熟悉Apache生命周期,但任何环境变量都会持续:
理论上,您可以授权IP地址(但IP地址是共享的,因此您可以访问任何共享IP的人...例如,在许多情况下,与客户端在同一建筑物中的每个人)。所以,这不安全。
你可以设置一个cookie,然后让另一个机制检查那个cookie ......但是你要么需要重复认证,要么拥有一个任何人都可以复制的共享cookie。所以,这不安全。
如果您使用的是C或Perl(mod_perl),那么您可以write an Apache module挂钩到请求周期的身份验证/授权部分。但是你在PHP工作,据我所知,没有人写任何东西让PHP玩Apache的内部(好吧,除非你算上PHP.pm,但是我'我不知道你怎么能把它与mod_perl结合起来。