帝国 CMS 上传文件类型限制
学完这篇,你能在帝国CMS后台准确改掉上传文件的类型白名单,让投稿人只能传你允许的文件格式,同时把 php、asp 这类可执行脚本挡在门外,改完当场就能验证效果。
第一步:找到控制上传类型的后台页面
这一步要拿到"允许上传什么文件"的开关位置,做完你就能看到当前生效的扩展名清单。以帝国CMS 7.5 为例:浏览器访问 http://你的域名/e/admin/ 登录后台,顶部横向菜单点「系统」→ 左侧竖排菜单点「系统设置」→ 点「系统参数设置」→ 页面中部出现一排标签页,切到「文件设置」。
在这个标签页里你会看到几项内容:附件上传目录(默认 d/file/)、上传文件大小上限(单位 KB)、以及控制扩展名的输入框。留意两个字段:一个是"允许上传的文件类型",一个是"不允许上传的文件类型"。把现在的值原样记到记事本里,改错了方便还原。
注意:如果你的后台没有「文件设置」标签,说明版本(如 7.2 及更早)菜单命名不同,就在「系统参数设置」整页里用 Ctrl+F 搜"上传",找到那个填扩展名的长输入框即可,位置是一样的。
第二步:配置白名单,明确只放开哪些格式
这一步要把你真正允许的扩展名写进去,做完后不在名单里的文件一律传不上去。在"允许上传的文件类型"输入框里填扩展名,不带点、不带星号,彼此用竖线 | 分隔。常见的写法:
gif|jpg|jpeg|png|bmp|webp|pdf|doc|docx|xls|xlsx|ppt|pptx|zip|rar|mp3|mp4
填完拉到页面底部点「提交」按钮保存。如果提交时弹出格式错误提示,换成英文逗号 , 再试一次——不同版本对分隔符的容忍度不一样。
注意:千万不要在这一栏里写
php、phtml、php5、asp、aspx、jsp、cgi、sh、exe。只要其中任意一个被放进来,等于给攻击者开了上传后门。html、htm、svg也建议排除,它们本身不执行,但可以被用来挂钓鱼页面或跑前端脚本。
第三步:用黑名单兜底
这一步是给白名单加一道保险,做完即使以后有人手滑往白名单里加了危险格式,也会被黑名单拦下。在"不允许上传的文件类型"输入框里填:
php|php3|php4|php5|phtml|pht|asp|aspx|jsp|jspx|cgi|pl|sh|exe|dll|html|htm|svg
同样点「提交」保存。
注意:白名单和黑名单同时存在时,帝国CMS是两者都要满足才放行。所以别把
jpg这类正常格式误填进黑名单,否则图片会莫名其妙传不上去。
第四步:检查会员组的上传权限
这一步针对开了会员投稿的站点,做完前台用户的上传也会受同一套规则约束。左侧菜单点「会员」→「会员组管理」→ 找到对应会员组点「修改」→ 在权限项里找"上传文件大小"和"允许上传文件类型"。前台投稿走的是这里的限制,它和系统参数里的设置是叠加关系,两处都放行才能传成功。
如果站点用的是「用户」→「管理用户组」那套后台用户体系,同样进去把上传相关项检查一遍。
第五步:清缓存并实测
这一步验证改动真的生效,做完你能确认拦截正常。后台点「系统」→「数据更新中心」→ 点「刷新所有缓存」→ 再点「更新数据库缓存」。然后到「栏目」→ 随便挑一个栏目点「增加信息」,在编辑器的附件上传处,故意传一个 .php 文件——正常结果应该是弹出"文件类型不允许"之类的提示,文件被拒绝。
第六步:在服务器层面再加一道锁
这一步是防止程序层被绕过,做完后即使上传目录里混进了脚本文件也执行不了。Nginx 站点配置里加:
location ~* ^/d/file/.*\.(php|php5|phtml|jsp|asp|aspx)$ { deny all; }
Apache 则在 d/file/ 目录下新建 .htaccess,写入 php_flag engine off。
注意:Nginx 改完要执行
nginx -s reload才生效,改配置不重载等于没改。
小结
- 上传类型的主开关在后台「系统」→「系统设置」→「系统参数设置」→「文件设置」标签页。
- 白名单负责"只放行什么",黑名单负责"永远拦住什么",两者同时生效、都要满足。
- 危险扩展名清单:php、phtml、asp、aspx、jsp、cgi、sh、exe,以及可挂脚本的 html、svg。
- 会员投稿的上传限制在「会员」→「会员组管理」里,和系统参数设置是叠加关系。
- 改完必须刷新缓存并实测一次,服务器层面还要禁止
d/file/目录解析脚本。
原文链接:https://www.gj0.com/thread-526.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。