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

posted @ 2026-07-19 08:51  码农隐于朝  阅读(4)  评论(0)    收藏  举报