如何在使用之前删除WYSIWYG编辑器的不安全内容?

时间:2013-07-22 07:15:54

标签: javascript wysiwyg

如何在使用之前删除其他标签的脚本标记或 iframe 标记和事件等所见即所得编辑的不安全内容?

<script>
// Dangerous contents
</script>

<iframe>
// bad web pages
</iframe>

<span onclick="javascript://do bad work here !!!">click me</span>

2 个答案:

答案 0 :(得分:1)

你不应该试图自己编写这样的保护措施。

特别是,您不应将保护放在客户端(javascript),而应使用像http://htmlpurifier.org/这样的服务器端过滤

答案 1 :(得分:-1)

我们可以使用像这样的javascript函数进行中微化

function neutralizeText(text) {
    var i,mtch=text.match(/(<[a-z]+\s+[^>]*\s+|<[a-z]+\s+)on[a-z]+(\s)*=(\b|\s|[^>])*>/gi);
    if(mtch!=null) {
        for(i=0;i<mtch.length;i++) {
            text=text.replace(mtch[i],mtch[i].replace(/\s+on[a-z]+(\s)*=/gi,' data-neutralized='));
        }
    }
    text=text.replace(/<script(\b|\s)[^>]*>(([ \t\r\n]|.)*?)<\/script>/ig,'');
    text=text.replace(/<iframe(\b|\s)[^>]*>(([ \t\r\n]|.)*?)<\/iframe>/ig,'');
    text=text.replace(/<object(\b|\s)[^>]*>(([ \t\r\n]|.)*?)<\/object>/ig,'');
    text=text.replace(/<\!\-\-(.*?)\-\->/g,'');
    text=text.replace(/<\!\-\-/g,'');
    return text;
}

但这还不够,你必须在服务器端检查它。因为可以在浏览器中禁用javascript。