【问题标题】:Is it 100% safe to do the following?执行以下操作是否 100% 安全?
【发布时间】:2011-10-10 08:45:14
【问题描述】:

执行以下操作是否 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中它不会造成任何伤害吗?

【问题讨论】:

标签: javascript security escaping


【解决方案1】:

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

也就是说,除了 XSS 之外还有一些问题。 如果不受信任的输入是这样的,它不会阻止社交工程尝试:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我没有看到它在任何标准的现代浏览器中执行,因为它被呈现为文本节点。 好读:http://www.educatedguesswork.org/2011/08/guest_post_adam_barth_on_three.html

      【讨论】:

      • 5 分钟前在 firefox7 控制台中测试过
      猜你喜欢
      • 1970-01-01
      • 2020-02-25
      • 1970-01-01
      • 1970-01-01
      • 2018-12-23
      • 1970-01-01
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多