0

我们正在开发一个 Angular 8 PWA 应用程序。该应用程序的一部分允许我们的客户创建自己的自定义表单来收集数据。

作为开发的一部分,我们正在组合一组函数来与数据交互。然而,由于我们很难为每个场景提供一个函数,我们正在考虑允许用户管理员创建他们自己的脚本以保存在我们的数据库中并在表单中执行。

为了实现这一点,我们正在考虑通过脚本DomSanitizer.bypassSecurityTrustScript()

或者可能是“邪恶”的 javascripteval()

这将在一个隔离的函数中运行,我们将在其中提供对应用程序中有限功能集的访问。例如:

if (fnGetFieldValue('FIELD1') === fnGetFieldValue('FIELD2')) {setFnFieldValue('FIELD3')= 'PASS')}

其中 fnGetFieldValue() 和 setFnFieldValue 将被定义为脚本可访问的函数以运行一组有限的操作。

问题是我们确实对允许此功能存在重大安全问题,即明显的 XSS 脚本攻击。是否有任何策略可以安全地运行这些用户自定义脚本?

鉴于 Squarepace、Zoho 等公司,powerapps 允许用户运行自定义代码,这些解决方案不也容易出现同样的问题吗?有谁知道他们如何绕过 eval 的“邪恶”使用?

感谢您对此的想法以及是否有任何 npm 包可以处理此问题以清理一些相关功能?

4

1 回答 1

1

使用或通过嵌入式脚本将用户脚本集成到您自己的代码中时遇到的大问题eval是:该代码可以访问您的应用程序的上下文,对其进行修改并带来安全风险(例如 XSS)。

避免这种情况的一种方法是强制用户的脚本在他们无法泄漏的沙盒预定义上下文中运行。一个帮助解决这个问题的 NPM 包是https://www.npmjs.com/package/safe-eval

于 2020-04-16T14:34:12.353 回答