用户上传的图片目录里混入脚本文件,访问后居然被执行。乍看像缓存或者权限的锅,追下去往往不是。
location ^~ /uploads/ {
location ~ \.(php|phtml|php5)$ { deny all; }
}
追下去是这么回事:Web 服务对全站开启脚本解析,上传目录没有单独限制。
「上传目录禁解析」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。
能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。报错里带路径的,先去看那个路径在不在、权限对不对。
同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。
具体做法是,上传目录关闭脚本解析;限制可执行文件类型;上传与访问使用不同域名。
验收就看一点,上传目录中脚本访问返回 403,图片仍可正常访问。