没有任何jQuery:
function decodeEntities(encodedString) {
var textArea = document.createElement('textarea');
textArea.innerHTML = encodedString;
return textArea.value;
}
console.log(decodeEntities('1 & 2')); // '1 & 2'
类似方法的安全问题
如迈克·塞缪尔,用一个
而不是不受信任的用户输入是XSS漏洞,即使 从未添加到DOM中:
function decodeEntities(encodedString) {
var div = document.createElement('div');
div.innerHTML = encodedString;
return div.textContent;
}
// Shows an alert
decodeEntities('
')
但是,此攻击不可能针对,因为不存在允许..因此,仍然存在于“编码”字符串中的任何HTML标记都将自动由浏览器进行实体编码。
function decodeEntities(encodedString) {
var textArea = document.createElement('textarea');
textArea.innerHTML = encodedString;
return textArea.value;
}
// Safe, and returns the correct answer
console.log(decodeEntities('
'))警告使用jQuery的.html()和.val()方法,而不是使用.innerHTML和.value也不安全*对于某些版本的jQuery,即使在使用textarea..这是因为jQuery的旧版本有意和显式地评估脚本包含在传递给.html()..因此,这样的代码在jQuery 1.8中显示了一个警报:
//
*多亏了额鲁彭克曼因为发现了这个漏洞。