我的知识记录

PbootCMS后台UEditor编辑器magnet ed2k链接自动加http_源码修改_协议白名单

PbootCMS的UEditor编辑器插入magnet:、ed2k://、thunder://等非标准协议链接,保存后被自动加上http://前缀,链接失效。这是UEditor的XSS过滤和自动链接识别功能导致的。彻底解决需要修改UEditor源码。

问题定位:UEditor有两个地方处理链接。一是自动链接识别(输入URL自动转a标签),二是a标签href属性的XSS过滤(非白名单协议被加http://)。magnet等协议不在默认白名单里,被当作不完整链接处理。

修改方法一:改ueditor.all.js的链接过滤逻辑。打开`static/ueditor/ueditor.all.js`(未压缩版),搜索`http://`找到自动补全代码。通常是: ``` if (!/^https?:///i.test(href)) { href = 'http://' + href; } ``` 改成: ``` if (!/^(https?|ftp|magnet|ed2k|thunder|flashget|qvod):/i.test(href) && href.indexOf('://') === -1 && href.indexOf(':') > 0) { href = 'http://' + href; } ``` 把magnet、ed2k等协议加入判断,匹配这些协议时不补全。

修改方法二:改XSS过滤白名单。ueditor.all.js里搜索`whitList`或`a:`的配置,找到a标签允许的属性,href属性的协议过滤。把magnet、ed2k等加到允许的协议列表。部分版本的XSS过滤在`filterRules`里,找到`'a': { ... href: ... }`,修改协议正则。

修改方法三(最简单,不改源码):编辑内容时切换到HTML源码模式,直接写`磁力链接`,切回可视化模式后不要点击该链接进行编辑,直接保存。UEditor在可视化模式下点击链接会触发格式化,源码模式直接写的不触发。适合偶尔加链接的场景。

修改ueditor.config.js:部分版本的配置文件里有`'linkProtocol': 'http'`,改成空字符串`''`,关闭自动补全协议。搜索`linkProtocol`或`autolink`相关配置。

压缩版处理:如果只有ueditor.all.min.js(压缩版),修改困难。建议下载对应版本的未压缩ueditor.all.js,修改后用JS压缩工具(如Toptotal、JSCompress)压缩,替换min.js。或者页面引用时改用all.js(开发版),文件大但修改方便。

PbootCMS后台保存时的PHP层过滤:检查`apps/admin/controller/content/ContentController.php`的保存方法,有没有对content字段做XSS过滤。如果PHP层也过滤href,需要同时改。PbootCMS默认用htmlspecialchars或自定义过滤,搜索`http://`看有没有自动补全逻辑。

测试流程:后台新建文章→HTML源码模式插入magnet链接→保存→查看前台页面源码→确认href是原始magnet链接没有http前缀。如果重新编辑文章又被改,说明是编辑器加载时的格式化问题,需要改编辑器的内容加载过滤。

注意事项: - 修改前备份原文件。 - 升级PbootCMS可能覆盖static/ueditor目录,修改会丢失,备份修改后的文件,升级后重新覆盖。 - 不要为了省事关闭所有XSS过滤,会引入安全漏洞,只加需要的协议到白名单。 - 测试普通http/https链接是否正常,不要改完影响常规链接。

PbootCMS后台UEditor编辑器magnet ed2k链接自动加http_源码修改_协议白名单

标签:

更新时间:2026-08-26 17:57:06

上一篇:PbootCMS后台图片上传提示存储目录创建失败_权限_磁盘_open_basedir_SELinux

下一篇:如何解决Nginx中的404 Not Found错误?伪静态、路径、权限全排查