使用 KnockoutJS 时如何防止注入攻击?

How to protect from injection attacks when using KnockoutJS?

我们公司计划使用 Knockoutjs,但我发现 this link 在讨论 KnockoutJS 中的安全问题。他们说人们可以很容易地在数据绑定属性中注入恶意代码。

例如:

<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 上呈现时,人们如何注入这个 <div data-bind="x:alert(1)" /> 才能让它工作?谁能告诉我黑客如何在浏览器打开的页面中注入这个?

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

如果不是很安全我就不会用了

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

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

"Securing knockout" 不是防止 XSS 的方法。

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

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

  • 不允许用户渲染 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

您会注意到 "not using knockout" 不在这两个列表中,而且大多数问题都与管理用户输入以及它如何在您的脚本代码中结束有关。用户输入如何在您的淘汰赛绑定中结束也是如此。

使用您在上面链接的安全绑定机制来管理您的基因敲除暴露将减少您潜在的攻击面。

但是一旦你有一段恶意的 html return 由你的服务器编辑或链接到你的页面,无论你是否有 knockout 与否,你都会遇到 XSS 问题。