如何在tinymce编辑器中键入后删除任何类似html的标记

如何在tinymce编辑器中键入后删除任何类似html的标记,tinymce,Tinymce,我有一个ice内联编辑器,用户可以根据需要粘贴和键入,一旦编辑完成,我将使用ng blur将最终内容保存到DB。我担心的是,用户可以编写或粘贴任何可能有类似html的标记,甚至一些可疑的脚本标记的内容。如果有任何可疑代码存在,我的代码会认为它是危险的请求。所以我想做的就是,在ng blur上,如果有任何html标记,而不是ins和del,那么它们应该被删除,我的编辑器应该有干净的代码,这样我就可以通过get window[varname].getElementContent方法来获得它们 对于粘

我有一个ice内联编辑器,用户可以根据需要粘贴和键入,一旦编辑完成,我将使用ng blur将最终内容保存到DB。我担心的是,用户可以编写或粘贴任何可能有类似html的标记,甚至一些可疑的脚本标记的内容。如果有任何可疑代码存在,我的代码会认为它是危险的请求。所以我想做的就是,在ng blur上,如果有任何html标记,而不是ins和del,那么它们应该被删除,我的编辑器应该有干净的代码,这样我就可以通过get window[varname].getElementContent方法来获得它们

对于粘贴,我使用以下代码

       {
           name: 'IceCopyPastePlugin',
           newLine: true,
           settings: {
              pasteType: 'formattedClean',
              preserve: '',
              afterPasteClean: function (body) {            
                 body = GetWithoutScriptString(body)
                    return body;
                 }
              }
       } ]
假设有一个初始化了inlineeditor的div,现在我可以编辑该编辑器中的内容了。我可以复制粘贴内容,也可以写作。我所要做的就是,每当我在编辑器内进行任何更改时,我都想清除内容。首先从编辑器新粘贴或编辑的文本等中删除所有有效或无效的html标记,然后接受更改,然后获取正确的内容并将其保存到DB

现在-

服务器端=>

HtmlSanitizer sanitizer = new HtmlSanitizer();
sanitizer.AllowedAttributes.Add("class");
sanitizer.AllowDataAttributes = true;
descHtml = sanitizer.Sanitize(descHtml);

您可以使用TinyMCE配置选项,如valid_elements/extended_valid_elements来控制要允许的标记。有类似的配置选项用于控制允许的属性。这些将帮助您确保TinyMCE只允许您需要的标记

此内容筛选类别下的配置选项都记录在此处:

也就是说,您永远不能假设客户端验证足以确保您的应用程序免受无效HTML、注入攻击、XSS等攻击


事实上,恶意用户可以使用其他工具将数据发布到您的应用程序中,这样内容就不会通过您的UI。此外,如果您误解了TinyMCE,您可能会在不知不觉中允许使用标记。在将数据存储到数据库之前,您应该始终在服务器端验证数据-这是确保您保存的数据安全的唯一方法。

感谢Michael Fromin,这对我来说非常有效,我从给定的数据集中选择了正确的设置,瞧!!它工作起来很有魅力。 This is my original text. This is I am writing as editing with script <ins>inserted text</ins><del>deleted text</del>
var tracker =
                        new ice.InlineChangeEditor({
                            element: element[0],
                            handleEvents: true,
                            invalid_elements : 'strong,em,script,embed,style,meta,img,head,body,input,iframe,monoscript,applet,object,paramnav,a,link,videp,track,source,audio,map,frame,fieldset,label,option,select,button,textarea,form,font,b',
                            extended_valid_elements : 'span[class|data-cid|data-userid|data-username|data-time]',
                            currentUser: {
                                id: 11,
                                name: 'user'
                            },
                            plugins: [
                                {
                                    name: 'IceCopyPastePlugin',
                                    newLine: true,
                                    settings: {                                           
                                        pasteType: 'formattedClean',
                                        preserve: '',
                                        afterPasteClean: function (body) {            
                                            body = GetWithoutScriptString(body)
                                            return body;
                                        }
                                    }
                                }
                                //, {
                                //    name: 'IcejQuerySpellcheckerPlugin',
                                //}
                            ]
                        });
HtmlSanitizer sanitizer = new HtmlSanitizer();
sanitizer.AllowedAttributes.Add("class");
sanitizer.AllowDataAttributes = true;
descHtml = sanitizer.Sanitize(descHtml);