【问题标题】:Javascript execution of custom user scripts using eval or domsanitizer使用 eval 或 domsanitizer 执行自定义用户脚本的 Javascript
【发布时间】:2020-04-16 23:23:18
【问题描述】:

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

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

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: javascript angular eval angular-dom-sanitizer


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,不幸的是,安全评估不允许逻辑。然而,使用相同的概念,我构建了一个脚本来清理代码并删除创建接口、访问文档、窗口和禁用 require() 的能力。
    猜你喜欢
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 2018-03-05
    相关资源
    最近更新 更多