执行以下操作是否100%安全?

时间:2011-10-10 08:45:14

标签: javascript security escaping

执行以下操作是否100%安全?:

var untrusted_input_from_3rd_party = '<script>alert("xss")<\/script>';
document.getElementsByTagName('body')[0].appendChild(document.createTextNode(untrusted_input_from_3rd_party));

考虑到第三方可以输入任何内容(HTML,CSS等),如果我通过createTextNode传递它然后将其添加到dom,我可以确定它不会造成任何伤害吗? / p>

3 个答案:

答案 0 :(得分:5)

这是防止XSS的好方法。通过createTextNode进行DOM操作被广泛用于安全地嵌入第三方文本。

那就是说,除了XSS之外还有问题。 如果不受信任的输入类似于:

,它不会阻止社交工程尝试
  

警告:我们在您的计算机上检测到恶意软件。将http://evil.org/复制并粘贴到浏览器网址栏中即可解决问题。

防止社交工程(除了不包括第三方内容)的最佳方法是明确内容来自第三方。

答案 1 :(得分:1)

现在进行测试。似乎是正确的。如果出现问题 - 它应该是浏览器错误,而不是你的错误。
通常,服务器应该对所有用户输入进行正确的html视图,然后将其返回给用户。

但是为了降低服务器负载(如果可以接受),你可以肯定地使用它。

答案 2 :(得分:1)

我不认为这是在任何标准的现代浏览器中执行的,因为它被渲染为文本节点。 好读:http://www.educatedguesswork.org/2011/08/guest_post_adam_barth_on_three.html