UEditorPlus踩过的坑
源码托管地址:https://gitcode.com/modstart-lib/ueditor-plus
文档地址:https://open.tecmz.com/ueditor-plus/
一、接口调试
后台接口,首先需要给他一个初始化配置的返回值
#region UEditor初始化配置返回 /// <summary>编辑器启动自动请求此接口获取上传配置</summary> private void ReturnEditorConfig(HttpContext context) { string json = string.Format( "{{" + "\"imageActionName\":\"uploadimage\"," + "\"imageMaxSize\":20480000," + "\"imageAllowFiles\":[\".png\",\".jpg\",\".jpeg\",\".gif\",\".bmp\",\".webp\"]," + "\"audioActionName\":\"uploadaudio\"," + "\"audioMaxSize\":20480000," + "\"audioAllowFiles\":[\".mp3\",\".wav\",\".ogg\",\".m4a\"]," + "\"videoActionName\":\"uploadvideo\"," + "\"videoMaxSize\":20480000," + "\"videoAllowFiles\":[\".mp4\",\".mov\",\".avi\",\".mkv\",\".flv\"]," + "\"fileActionName\":\"uploadfile\"," + "\"fileMaxSize\":20480000," + "\"fileAllowFiles\":[\".pdf\",\".doc\",\".docx\",\".xls\",\".xlsx\",\".zip\",\".rar\",\".7z\"]" + "}}"); context.Response.Write(json); } #endregion
然后在判断请求的分支上给一个节点
// 编辑器初始化配置接口,无需文件 case "config": ReturnEditorConfig(context); return;
这样才能把接口调通
二、内置过滤
在内部机制中会自动过滤XSS相关内容,而且audio等标签不在白名单中,所谓在配置项中设置白名单也完全不起作用。
导致插入audio后,切换源码查看有相关标签,但是getContent方法拿不到,因此也存不了数据库
解决方法:
1.打开 ueditor.all.js(或 ueditor.all.min.js)。
2.搜索 UE.plugins['defaultfilter']
3.在该函数体的第一行添加 return;,直接退出过滤逻辑。
UE.plugins['defaultfilter'] = function () { return; // 添加这一行,跳过所有过滤 // 原有代码... };
不用考虑屏蔽XSS过滤逻辑对生产环境的影响,因为如果不屏蔽,影响正常功能,需要通过直接读iframe的方式,拿到源码存库,一样无法过滤XSS。
function getEditorRawHtml(editor) { const iframe = editor.iframe; if (!iframe || !iframe.contentDocument) return ""; // 直接拿原生DOM,源码里有什么就返回什么,保留audio/video return iframe.contentDocument.body.innerHTML; } // 提交按钮使用 $("#submit").click(function () { const html = getEditorRawHtml(ue); console.log(html); $("#txtContent").val(html); $("form").submit(); })
因此XSS防线主要依赖后端过滤,前端可以轻易构造请求绕过编辑器自身安全机制,毫无意义。直接屏蔽,不用犹豫。
三、版本问题
明明下载的4.5,但是文件内部注释写的2.0

浙公网安备 33010602011771号