沒有任何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中顯示了一個警報:
//
*多虧了額魯彭克曼因為發現了這個漏洞。