您的位置:首页 > Web前端 > JavaScript

被注入js脚本的xss的解决方法

2017-01-10 15:20 218 查看

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) {
// 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');

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">',
// 这里不能直接对data.content toLowerCase, 所以上面要加上大写验证
'<div class="richtext ke-edit" name="content">' + html + '</div>',
'</div>'
];
return tpl.join("");
},
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: