您现在的位置是:首页 >技术杂谈 >tp6用户上传的图片存储目录防木马(限制仅访问图片不可访问php文件)网站首页技术杂谈

tp6用户上传的图片存储目录防木马(限制仅访问图片不可访问php文件)

落落鱼2013 2025-02-19 12:01:03
简介tp6用户上传的图片存储目录防木马(限制仅访问图片不可访问php文件)

问题

最近一个旧项目中发现专供用户上传图片的uploads目录因之前上传入口限制不严格导致用户上传了php文件上来,为防止此类问题出现。除了严格限制入口文件的上传类型,又专门对此上传目录的访问权限做了一定限制。使其仅可访问除php文件外的文件类型。即:

访问 http://www.myweb.com/uploads/store/1/test.php 不可访问。会报以下错误:

而访问同目录下的图片文件:http://www.myweb.com/uploads/store/1/1.png,则正常显示。

解决

要限制对某个目录中图片以外的文件(如PHP脚本)的访问,可以通过在服务器配置中设置来实现。根据你的服务器环境和使用的Web服务器软件(如Apache或Nginx),有不同的方法来实现这个需求。下面分别介绍在Apache和Nginx中如何配置:

在Apache中

可以使用.htaccess文件或者修改Apache的配置文件(httpd.confapache2.conf)来限制对目录中PHP文件的访问。

使用.htaccess文件
  1. 确保你的Apache服务器启用了.htaccess支持。

  2. 在你的图片目录中创建一个.htaccess文件,并添加以下内容:

<FilesMatch ".php$">

Order allow,deny

Deny from all

</FilesMatch>

这将会阻止所有对.php文件的访问。

修改Apache配置文件

如果你希望对整个服务器或特定虚拟主机进行配置,可以在Apache的配置文件中添加以下内容:

<Directory "/path/to/your/image/directory">

<FilesMatch ".php$">

Order allow,deny

Deny from all

</FilesMatch>

</Directory>

在Nginx中

在Nginx中,你可以通过配置文件来限制对特定目录中PHP文件的访问。

  1. 打开Nginx的配置文件(通常位于/etc/nginx/nginx.conf/etc/nginx/sites-available/目录下的某个文件)。

  2. 在相应的server块中,为你的图片目录添加一个location块,如下所示:

    location ~* .php$ {
    
    deny all;
    
    }

或者,如果你只想对特定目录进行限制,可以这样配置:

location /path/to/your/image/directory {

location ~* .php$ {

deny all;

}

}

确保你的Nginx配置文件语法正确,然后重新加载或重启Nginx以应用更改:

sudo nginx -t # 检查配置文件语法是否正确

sudo systemctl reload nginx # 重新加载Nginx配置(或使用其他适合你系统的命令)

通过以上任一方法,你都可以有效地阻止对图片目录中PHP文件的访问,只允许图片文件的访问。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。