【问题标题】:Control of dynamically loaded scripts in Meteor.jsMeteor.js 中动态加载脚本的控制
【发布时间】:2019-06-06 21:11:25
【问题描述】:

是否有任何机制(至少理论上)可以控制向客户提供哪些脚本?我已经使用import('dynamically_loadable_file') 将代码拆分为可动态加载的部分,但只要在客户端上调用它,就会提供文件。我想执行一些安全检查用户是否有权加载文件。我想到了中间件,但那些只是用于 HTTP 和可执行脚本是通过 WebSockets 提供的。

另外,如果可能的话,我想控制所提供脚本的内容。例如。我想根据用户加载它们向脚本添加或“隐藏”一些函数或变量。我想可能需要使用 AST 进行动态编译之类的东西,或者可能有/将有其他东西可用。我想这是另一个层次,但如果有一些关于这些想法的内容,我将不胜感激。

也许流星根本不可能,所以如果这在 JavaScript (node.js) 世界的任何地方都是可能的,那也会有所帮助。

感谢您的想法和解释。

【问题讨论】:

    标签: javascript node.js meteor dynamic dynamic-import


    【解决方案1】:

    大多数客户端保护机制都可以包含足够的知识和正确的工具。

    对您的问题最可行的解决方案是为您当前的前端引擎使用服务器端渲染 (ssr) 库。

    有了 ssr 你就可以解决

    • 允许控制向客户端提供哪些脚本?

    • 执行一些安全检查用户是否有权加载文件

    • 脚本通过 WebSockets 提供

    • 控制所提供脚本的内容

    • 根据用户加载某些函数或变量向脚本添加或“隐藏”它们

    因为您的所有模板都在服务器上呈现,并且只有结果数据返回给客户端。

    Meteor 的一些 ssr 包:

    通用:https://docs.meteor.com/packages/server-render.html

    React:https://www.chrisvisser.io/meteor/how-to-set-up-meteor-react-with-ssr(带有样板代码库链接的指南)

    Vue:https://github.com/meteor-vue/vue-meteor/tree/master/packages/vue-ssr

    原生 Meteor 方式

    除此之外,我想强调的是,您可以通过出版物和方法实现大多数数据处理。

    如果您的数据和逻辑在服务器上不受保护,则在客户端显示/隐藏 HTML 元素不会增加任何安全性。

    如果您只将正确的数据发布给正确的用户(例如使用alanning:roles),那么您加载哪些脚本并不重要。

    方法也是如此:如果您对谁(再次使用alanning:roles)可以调用方法非常严格,那么用户是否可以禁用路由器并查看路由器上的所有“隐藏”区域都没关系客户端,因为所有无效操作都在服务器端被拒绝。

    【讨论】:

    • 感谢您的帖子,但它并没有真正回答我的问题,也没有解决这些想法。 SSR 绝对会违背将 JS 用于 PWA 的任何目的。我也知道需要保护数据,但我想通过禁止未经授权的用户查看代码来增加下一级安全性,这样他们甚至无法猜测哪里可能是不安全的出版物(例如)。
    • 我看不出 SSR 在哪里不能解决这个问题?如果您有不安全的出版物,您需要保护它们并限制它们的速率,并在必要时添加黑名单 ip。 IMO 非常不鼓励通过默默无闻来确保安全。
    • 是的,SSR 可以解决问题,但会禁用 PWA 架构,我将不再拥有动态应用程序,但必须重新加载所有内容。 Wiki 告诉我“……建议永远不要将隐匿作为唯一的安全机制。”我不希望它只是机制。也可能有合法的理由来控制脚本。例如。我不想知道我的系统允许某些用户使用某些功能,例如一些模块。
    猜你喜欢
    • 2012-10-09
    • 1970-01-01
    • 2014-03-10
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    相关资源
    最近更新 更多