兄弟们!昨天被叔叔上门问话啦 !你们是如何做的文件上传校验呢?

做的网站在 storage 目录下多了个 index.php 文件,可以通过我们的域名访问到非法网站。
大家在文件上传功能中是怎么校验的呢?
有什么包可以实现非法文件的校验么?

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 33

nginx 配置文件加个这个 访问的时候文件会变成下载,不会执行。其他的图片文档都可以正常访问。先避免 .php 文件被执行的问题

location  ^~ /storage
    {
        alias /www/wwwroot/xxxxx/public/storage;
        try_files $uri $uri/ =404;
    }
4个月前 评论
mmx (楼主) 4个月前
jimmy 4个月前
mmx (楼主) 4个月前
OwenZhang 1个月前

是不是木马导致的。我试过 laravel 的文件上传,是上传不了 php 文件的

4个月前 评论
mmx (楼主) 4个月前
ononl (作者) 4个月前

storage 目录把运行的权限去掉基本可以免掉大部分注入

4个月前 评论
mmx (楼主) 4个月前
浮心 4个月前
lovewei 4个月前
浮心 4个月前
deatil (作者) 4个月前
deatil (作者) 4个月前

用户上传文件直接进 OSS,只有自己生成的文件才丢在 storage 下面,从根本上解决问题

4个月前 评论
mmx (楼主) 4个月前
GeorgeKing 4个月前

且不说执行权限的问题, .php 后缀的文件是怎么传上来的?

4个月前 评论
mmx (楼主) 4个月前
qufo 4个月前
mmx (楼主) 4个月前
mmx (楼主) 4个月前

做好代码规范,制定文档规则性的都按照文档执行

4个月前 评论

可以通过 mime 类型限制一下

https://www.php.net/manual/en/function.mime-content-type.php

$_FILES 里的属性,只有 tmp_name 能信任,type 和 name 都能伪造

4个月前 评论
sanders

我提三点:

  1. 按国内法律,所有 UGC 内容必须做审核,管理这样松,即便不是 PHP 文件,也容易出其他问题;
  2. 建议将写入 storage/public 目录的文件都转移到其他目录,用新的域名和服务器配置进行读取(避免调用 fastcgi);
  3. 如果有预算建议使用 OSS 配合 CDN 进行附件存储。
4个月前 评论
mmx (楼主) 4个月前

不是?storage 的目录一般是存一些不公开的文件用的,然后通过接口下载的方式提供给外部用户,无法直接访问;要直接访问就存去 public 下,例如图片类

4个月前 评论
mmx (楼主) 4个月前

nginx 配置文件加个这个 访问的时候文件会变成下载,不会执行。其他的图片文档都可以正常访问。先避免 .php 文件被执行的问题

location  ^~ /storage
    {
        alias /www/wwwroot/xxxxx/public/storage;
        try_files $uri $uri/ =404;
    }
4个月前 评论
mmx (楼主) 4个月前
jimmy 4个月前
mmx (楼主) 4个月前
OwenZhang 1个月前

apache 的话 有个 modsecurity 扩展 可以自己写个 php 脚本 检测一下上传文件有没有 php 标签就行了

4个月前 评论

禁止这个目录执行后缀是 php|php5|jsp 的文件访问

location ~ ^/(storage )/.*\.(php|php5|jsp)$ {
    deny all;
}
4个月前 评论
mmx (楼主) 4个月前

nginx 配置综合了一下

location  ^~ /storage
{
     if ($request_uri ~ ^/(storage)/.*?\.(php|php5|html)$) {
        return 403;
     }
    alias /home/wwwroot/*/public/storage;
    try_files $uri $uri/ =404;
}
4个月前 评论