acelan的解决方法
// acelan fix xss
// 20170110 假红包注入事件
function encodeHTML(source) {
return String(source)
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, """)
.replace(/'/g, "'");
}
自己的解决方法
stripTag: function (params) {
return document.createElement('del').appendChild(document.createTextNode(params)).parentNode.innerHTML;
},
// by acelan,紧急过滤掉黑名单中的标签,不严谨的做法,作为富文本应该使用白名单方式
// 当前过滤的标签为script img style link iframe
//
// var blacklist = 'script img style link iframe'.split(' ').join('|');
// var re = new RegExp('<(' + blacklist +')>(.*)<\/(' + blacklist + ')>|<(' + blacklist +') [^/]*/>|<(' + blacklist +') [^>]*>', 'gi');
富文本处理方法
richtext: function(data) {
function remove(tn, root) {
var tmp = Array.prototype.slice.call(root.getElementsByTagName(tn), 0)
for (var i = 0, len = tmp.length; i < len; i++) {
tmp[i].parentNode.removeChild(tmp[i])
}
}
function escape(html) {
var div = document.createElement('div')
var blacklist = 'script img style link iframe input button'.split(' ')
div.innerHTML = html
for (var i = 0, len = blacklist.length; i < len; i++) {
remove(blacklist[i], div)
}
return div.innerHTML
}
var html = data.content;
try {
html = escape(html)
} catch (e) {}
var tpl = [
'<div class="control-content">',
'<div class="richtext ke-edit" name="content">' + html + '</div>',
'</div>'
];
return tpl.join("");
},