使用PHP / Apache限制对静态文件(html,css,img等)的访问
假设您的服务器目录中有很多html,css,js,img等文件。通常,互联网域中的任何用户都可以通过简单地输入完整的URL来访问这些文件,例如:http : //example.com/static-
files/sub/index.html
- 现在,如果只希望授权用户能够加载那些文件怎么办?对于此示例,假设您的用户首先从这样的URL登录:http
- //example.com/login.php
您将如何允许登录的用户查看index.html文件(或“ static-files”下的任何文件),但将文件限制为其他所有人?
到目前为止,我已经提出了两种可能的解决方案:
在“静态文件”下创建以下.htaccess文件:
Options +FollowSymLinks RewriteEngine on
RewriteRule ^(.*)$ ../authorize.php?file=$1 [NC]
然后在authorize.php中…
if (isLoggedInUser()) readfile('static-files/'.$_REQUEST['file']);else echo 'denied';
这个authorize.php文件已经大大简化了,但是您知道了。
在“静态文件”下创建以下.htaccess文件:
Order Deny,AllowDeny from all
Allow from 000.000.000.000
然后,我的登录页面可以为每个登录用户附加.htaccess文件和IP。显然,这还需要某种清除例程,以清除旧的或不再使用的IP。
我担心随着访问的用户和文件数量的增加,我的第一个解决方案在服务器上的价格可能会非常昂贵。我认为我的第二个解决方案将便宜得多,但是由于IP欺骗等原因,其安全性也将降低。我还担心,如果同时有许多用户,将这些IP地址写入htaccess文件可能会成为应用程序的瓶颈。
以下哪种解决方案听起来更好,为什么呢?或者,您能想到一个完全不同的解决方案,比其中任何一个方案都更好吗?
回答:
我会考虑使用PHP加载程序来处理身份验证,然后返回所需的文件。例如,<img src='picture.jpg' />
不要做类似的事情<img
src='load_image.php?image=picture.jpg' />。
您的图像加载器可以验证会话,检查凭据等,然后决定是否将请求的文件返回到浏览器。这将使您可以将所有安全文件存储在Web可访问的根目录之外,因此没有人会仅WGET文件或“意外”浏览那里。
只要记住要在PHP中返回正确的标头,并在php中执行类似readfile()的操作,这会将文件内容返回给浏览器。
我已经在几个大型安全网站上使用了此设置,它的工作原理就像一个魅力。
编辑:我当前正在构建的系统使用此方法来加载Javascript,图像和视频,但是我们对安全性不是很担心。
以上是 使用PHP / Apache限制对静态文件(html,css,img等)的访问 的全部内容, 来源链接: utcz.com/qa/422108.html