控制Meteor.js中的动态加载脚本

时间:2019-06-06 21:11:25

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

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

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

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

感谢您的想法和解释。

1 个答案:

答案 0 :(得分:1)

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

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

使用ssr,您可以解决

  •   

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

  •   

    执行一些安全检查,以确定用户是否具有加载文件的权限

  •   

    脚本是通过WebSockets提供的

  •   

    控制所提供脚本的内容

  •   

    根据用户加载的脚本向脚本添加或“隐藏”一些函数或变量

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

流星的一些ssr软件包:

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

反应: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

原生流星之路

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

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

如果仅将正确的数据发布给正确的用户(例如使用alanning:roles),则加载的脚本都没有关系。

方法同样适用:如果您严格要求谁(再次使用alanning:roles)可以调用方法,则无所谓,如果用户可以禁用路由器并查看所有“隐藏”区域在客户端,因为所有无效操作都在服务器端被拒绝。