Javascript 使用 eval 或 domsanitizer 执行自定义用户脚本

Javascript execution of custom user scripts using eval or domsanitizer

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

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

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

传递脚本

或者可能是 'evil' javascript eval()

这将 运行 在一个孤立的功能中,我们将在该功能中提供对应用程序中一组有限功能的访问。例如:

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

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

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

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

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

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

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