当前位置: 首页 > 面试题库 >

使用PHP / Apache限制对静态文件(html,css,img等)的访问

龙玺
2023-03-14
问题内容

假设您的服务器目录中有很多html,css,js,img等文件。通常,互联网域中的任何用户都可以通过简单地输入完整的URL来访问这些文件,例如:http : //example.com/static-
files/sub/index.html

现在,如果只希望授权用户能够加载那些文件怎么办?对于此示例,假设您的用户首先从这样的URL登录: http
//example.com/login.php

您将如何允许登录的用户查看index.html文件(或“ static-files”下的任何文件),但将文件限制为其他所有人?

到目前为止,我已经提出了两种可能的解决方案:

解决方案1
在“静态文件”下创建以下.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文件已经大大简化了,但是您知道了。

解决方案2
在“静态文件”下创建以下.htaccess文件:

Order Deny,Allow
Deny 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,图像和视频,但是我们对安全性不是很担心。



 类似资料:
  • 在我们的体系结构指南中,我们应该只从域模型或存储库实现(在基础结构层)中实例化业务异常 同样,这不会编译,不存在。 有人有主意吗?

  • 问题内容: 我想限制登录用户可以使用的文件,否则返回403错误或类似错误。例如,用户只有在登录后才能查看/下载。 我知道如果未登录,如何使用Flask-Login控制文件的实际显示,但是如果他们直接在浏览器中访问链接,我将不知道如何阻止访问文件。 问题答案: Flask添加了一条静态路由来提供静态文件。在生产中,通常会“短路”此路由,以便Nginx在请求到达您的应用程序之前为文件提供服务。不用添加

  • 在我的getimage.php文件中,有一个函数返回一个图像和一个echo语句 然后在我的index.html中,我有以下代码 现在很明显,我知道我做错了什么,因为在html中它是一个坏图片。我假设将src设置为.php文件实际上并不执行getimage.php 有什么想法/帮助吗? 谢谢!

  • 本文向大家介绍Python的Flask框架及Nginx实现静态文件访问限制功能,包括了Python的Flask框架及Nginx实现静态文件访问限制功能的使用技巧和注意事项,需要的朋友参考一下 Nginx配置 Ngnix,一个高性能的web服务器,毫无疑问它是当下的宠儿。卓越的性能,灵活可扩展,在服务器领域里攻城拔寨,征战天下。 静态文件对于大多数website是不可或缺的一部分。使用Nginx来处

  • 问题内容: 我正在使用 ,创建使用HTML,CSS,JavaScript的PyQt5应用程序。 当我们以一般方式运行时,它工作正常,即 如下导入HTML, 如下导入CSS,JavaScript文件, 现在,我尝试使用创建一个独立文件。 pyinstaller命令: 我需要在生成的文件中手动添加静态文件才能按预期工作。我想将其包含在文件本身中。如何得到这个? 问题答案: 根据您的问题,您可以假定您的

  • 问题内容: 我正在尝试将我一直在工作的Django网站从开发服务器阶段移至真正的托管环境。目前,我只是在我的个人计算机上托管。我已经安装了Apache和mod-wsgi,但是在获取静态文件时遇到了问题。我很确定这与Apache有关。这是我的站点配置文件: 我正在尝试从我使用静态别名的目录中托管文件。当我尝试加载网站时,所有内容都出现了,但是没有CSS。另外,当我访问我的URL www.server