是否有任何机制(至少是理论上的)可以控制将哪些脚本提供给客户端?我已经使用import('dynamically_loadable_file')
将代码拆分为可动态加载的部分,但是只要在客户端上调用它,文件就会被提供。我想执行一些安全检查,以确定用户是否具有加载文件的权限。我想到了中间件,但这些中间件仅用于HTTP,而可执行脚本则通过WebSockets提供。
此外,如果可能的话,我想控制所提供脚本的内容。例如。我想根据加载用户的方式向脚本添加或“隐藏”某些功能或变量。我猜可能需要使用AST进行动态编译,或者也许/将有其他可用的东西。我想这是另一个层次,但是如果有关于这些想法的内容,我将很感激。
也许流星根本不可能,所以如果这在JavaScript(node.js)世界中的任何地方都可行,那么它也会有所帮助。
感谢您的想法和解释。
答案 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
)可以调用方法,则无所谓,如果用户可以禁用路由器并查看所有“隐藏”区域在客户端,因为所有无效操作都在服务器端被拒绝。