上传文件扩展名是不允许的扩展名怎么解决
上周帮同事传一份设计稿,上传系统弹出一行红字:“上传文件扩展名是文件不允许的扩展名”。她愣了半天,扩展把文件从 .psd 改成 .png 再传,允许还是展名被拦。最后发现,解决问题根本不在文件本身,上传而是文件她用的那个内部系统只认白名单里的几种格式——.psd 不在其中。 这种情况太常见了。扩展你手里明明有个正经文件,允许网站或软件却死活不让你传。展名原因通常分两类:要么是解决服务器端做了扩展名白名单,只放行 .jpg、上传.pdf、文件.docx 这类“安全格式”;要么是扩展前端做了黑名单,专门拦 .exe、.bat、.js 这些可能带脚本的扩展名。白名单比黑名单狠——黑名单只挡已知危险分子,白名单等于告诉你:除了我列的这几个,其他统统不行。 那怎么绕过去?先别急着找“破解”工具。最直接的办法是改扩展名,但改完得保证文件内容没坏。比如你把 .rar 改成 .txt 传上去,服务器可能只检查后缀,传完再改回来就能用。可要是对方系统会读文件头(前几个字节的魔数),这招就废了。我试过把一个 .7z 改成 .jpg 传某网盘,传是传上去了,下载回来一打开,报错——文件头对不上,解压软件不认。 更稳妥的做法是换容器。把文件塞进允许的格式里。比如传不了 .py 脚本,就打包成 .zip;传不了 .svg 矢量图,就嵌进 .pdf 或者转成 .png。有个做前端的朋友要传 .woff2 字体文件到公司 CMS,系统只让传图片,他把字体二进制转成 base64 字符串,存成 .txt 传上去,前端再解码还原。土办法,但管用。 如果连打包都不行,就得看具体场景了。有些系统允许传 .zip,但会解压检查内部文件扩展名。这时候可以给文件改个无害的后缀,比如把 .exe 改成 .exe.txt,再打包。解压后手动改回来。注意别用 .jpg 这种会被图像库尝试解析的格式,否则服务器可能直接报“图片损坏”。 还有一种情况:扩展名本身没问题,但文件大小或 MIME 类型被拦了。浏览器上传时带的 Content-Type 如果和扩展名不匹配,有些后端会拒绝。比如 .csv 文件被识别成 application/octet-stream,而不是 text/csv。这时候用开发者工具改请求头,或者换个浏览器试试,有时能过。 我自己的经验是,先看错误提示的粒度。如果只说“扩展名不允许”,大概率是白名单,改后缀或换容器最有效。如果提示“文件类型不合法”还带具体 MIME,那得从内容层面动手。别迷信网上那些“改 .htaccess”的教程——你未必有服务器权限,而且很多系统跑在云函数或容器里,配置文件根本摸不到。 最后说个真事。有人为了传一个 .sh 脚本到论坛,把内容复制进 .txt 附件,正文里写“下载后改回 .sh”。结果论坛自动给 .txt 加了防病毒扫描,扫完没毒,但下载链接被重写成 .txt.html。他只好把脚本拆成三段,分别塞进三个 .jpg 的 EXIF 注释里。折腾一下午,传上去了。你说这算解决问题,还是算被问题解决?反正文件是到了。 所以下次再看见那行红字,先别骂系统。看看它到底允许什么,再想想你手里那个文件能不能换个壳。大部分时候,不是文件错了,是规则太窄。而窄规则下面,总有缝。
-
上一篇
-
下一篇
- 最近发表
- 随机阅读
- 搜索
-
- 友情链接
-