【问题标题】:How to protect from injection attacks when using KnockoutJS?使用 KnockoutJS 时如何防止注入攻击?
【发布时间】:2015-04-14 08:56:25
【问题描述】:

我们公司计划使用 Knockoutjs,但我发现 this link 正在讨论 KnockoutJS 中的安全问题。他们说人们很容易在 data-bind 属性中注入恶意代码。

例如:

<script src="http://knockoutjs.com/downloads/knockout-2.3.0.js"></script>
<div data-bind="x:alert(1)" />
<script> 
    ko.applyBindings();
</script>

我对XSS攻击不是很了解,也不知道有多少种方法可以在网站中注入恶意代码。

  1. 谁能告诉我页面何时在客户端 PC 上呈现,那么人们如何注入此 &lt;div data-bind="x:alert(1)" /&gt; 以使其正常工作?谁能告诉我黑客如何将其注入在浏览器中打开的页面中?

  2. 谁能告诉我knockoutjs还有哪些其他安全问题?

如果不是很安全,我不会使用它。

我还获得了一些链接,讨论了如何更好地保护 knockoutjs:

有人知道如何获得完全安全的 knockoutjs 吗?因为看过 KnockoutJS 的教程,感觉学习曲线不高。

【问题讨论】:

  • 是否存在任何工具列表,这些工具将通过 url 检查网站 url 以检查威胁和漏洞,最后显示每个 url 和安全问题的详细信息。让我知道。谢谢
  • 我只有时间粗略研究一下您链接到的网站和 Slideshare 演示文稿,但据我了解,他们的批评是 如果 攻击者设法例如,她选择的插入数据绑定属性、Knockout 和其他 JSMVC 框架提供了比必要的更广泛的攻击面。它没有指定攻击者首先如何注入代码,或者使用 Knockout 以某种方式实现这一点。黄金法则,在任何地方都适用:不要相信用户提供的数据。例如:永远不要盲目地将您从用户那里获得的东西放入 html 绑定中。
  • Open Web Application Security Project 是熟悉 XSS 和其他威胁的好地方。
  • 从我对该站点的快速浏览来看,我无法确定有人会如何修改数据绑定属性中的值。我知道在使用text 绑定时淘汰赛会进行编码,因此建议使用text,并且在使用html 时要非常小心,因为它允许xss,所以只有在您信任正在输出的html 时才使用它
  • @IanGrainger 是的,答案是否定的,因为它只是使用 JavaScript 来设置值 element.value=viewModel.value

标签: knockout.js xss


【解决方案1】:

“安全敲除”不是防止 XSS 的方法。

无论您如何将数据绑定到应用程序中的元素,您都必须首先管理您的 XSS 暴露,并且首先要保护您的具有敲除绑定的页面:

  • 验证会影响特定网页返回的输入 列表项

  • 不允许用户渲染用户提供的 html 输出 首先对其进行消毒

  • 不允许不受信任的第三方交付 脚本参考或合并来自您不知道的第 3 方的链接 信任。

如何防止 XSS 的完整列表在这里:

https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet

https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet

您会注意到“不使用敲除”不在这些列表中,并且大多数问题与管理用户输入以及它如何在您的脚本代码中结束有关。用户输入在您的淘汰赛绑定中的最终结果也是如此。

使用您在上面链接的安全绑定机制管理您的淘汰赛风险将减少您潜在的攻击范围。

但是一旦你的服务器返回了一段恶意的 html 或者链接到你的页面中,无论你是否有敲除,你都会遇到 XSS 问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-24
    • 2011-01-19
    • 2014-12-08
    • 2013-04-18
    • 1970-01-01
    • 2019-01-09
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多