维护一个十年前的 CMS,后台编辑器还是 KindEditor 4.1.11。编辑说传图片转半天最后报错,F12 里 upload_json.php 返回 500。打开服务器一看,上传目录权限是 644,PHP 根本没权限往里写。
它是什么,现在什么状态
KindEditor 是国产富文本编辑器,4.x 在 2013 年前后用得极多,之后基本停止维护。它不依赖 jQuery,体积小,配置集中在 config.js,很多老后台至今还带着它。
上传接口绕不开
编辑器本身不带上传功能,靠 uploadJson 指向自己的接口,图片、文件、媒体各配一个。接口必须返回 JSON,字段是 error 加 url,error 为 0 才算成功,非 0 时前端只弹一句上传失败,具体原因全看不到。调试时先用浏览器直接请求接口,看返回体对不对,比在前端点半天强。
几个常坏的配置项
- imageUploadJson 写成相对路径,换了路由就 404
- 上传目录没写权限,接口 500,日志里是 permission denied
- 返回的 url 带了域名,站点换域名后图片全裂
- allowFileManager 开着,却忘了配 fileManagerJson
还有 items 配置,把 image 从列表里删掉,界面上就没有传图按钮,看着像功能坏了,其实是配置改过。
安全这块必须自己补
老版本上传接口常见三个洞:后缀白名单没做,传个 php 就能执行;上传目录允许跑脚本;返回的 url 没过滤,能拼出 XSS。至少要做到后缀白名单、目录禁止执行、文件名重命名成随机串,目录放在站点根之外,用脚本读出来再输出。上传接口最好单独限流,一个 IP 一分钟几十次就该拦,图片站被刷满存储的例子不少。
要不要换掉
新项目别再用它。替代品里 wangEditor 轻、中文文档全,TinyMCE 功能最全,Quill 适合深度定制。老项目实在改不动,就在上传接口外面加一层校验,别让编辑器成为整套系统里最薄的那块板。
富文本编辑器留下的风险,最后都落在上传目录那几个文件上。谁都能传,就等于谁都能执行。