运维开发网

meteor – 我必须在Collection.allow和Collection.deny中覆盖哪些逻辑才能确保它的安全性?

运维开发网 https://www.qedev.com 2020-06-11 13:27 出处:网络 作者:运维开发网整理
所以刚刚开始玩Meteor并尝试绕过安全模型.似乎有两种方法可以修改数据. Meteor.call方式似乎非常标准 – 几乎只是调用服务器并实现了自己的一套业务规则. 然后是Collection.allow方法,它似乎与我以前做过的任何事情都有所不同.所以看起来如果你放了一个collection.allow,你就会说客户端可以对该集合进行任何写操作,只要它可以通过其allow函数中的验证. 这让我
所以刚刚开始玩Meteor并尝试绕过安全模型.似乎有两种方法可以修改数据.

Meteor.call方式似乎非常标准 – 几乎只是调用服务器并实现了自己的一套业务规则.

然后是Collection.allow方法,它似乎与我以前做过的任何事情都有所不同.所以看起来如果你放了一个collection.allow,你就会说客户端可以对该集合进行任何写操作,只要它可以通过其allow函数中的验证.

这让我感到不安,因为它感觉很自由,我的允许功能需要很长时间,以确保它足够安全地锁定.

例如,mongodb没有架构,因此您必须基本上有一个规则来定义哪些字段将被接受以及这些字段必须包含的格式.

您是否还必须为可能对您的系统进行的每种类型的更新添加业务逻辑.

所以说,我有一个SoccerTeam系列.我可能需要进行一些更改,例如我添加或删除播放器,更改团队名称,团队状态已更改等.

在我看来,你必须把所有东西都放在这个庞大的功能中.这听起来像是一个激进的想法,但似乎Meteor.call方法会简单得多.

我是以错误的方式思考这个问题(或者错误的用例?)有没有人有任何关于如何构造允许或拒绝函数的示例,其中列出了我可能需要检查我的允许函数以使我的函数收藏安全吗?

您正在遵循我在决定如何在构建Edthena时处理数据突变时使用的相同推理线.开箱即用,meteor为您提供了进行简单权衡的工具:

Do I trust the client and get a more responsive UI (latency compensation)? Or do I require strict control over data validation, but force the client to wait for an update?

我使用后者,并且专门使用方法调用有几个原因:

>我晚上睡得更好,因为我知道只有一种方法可以更新我的每个系列.

>我发现我的一些更新需要在服务器上执行才有意义的副作用(例如,对其他集合进行非规范化更新).

>目前,我们的应用程序的延迟补偿没有明显的好处.我们发现大多数写入的延迟对用户体验来说无关紧要.

>允许和拒绝规则是弱工具.它们基本上只适用于验证所有权和其他简单检查.

在我们首次投入生产时(2013年8月),这似乎是一个彻底的结论.流星文档,API和演示突出了客户端写入的使用,所以我不完全确定我做出了正确的决定.几个月后,我第一次有机会与几个流星核心开发者坐下来 – 这是他们对我的设计选择的反应总结:

This seems like a rational approach. Latency compensation is really useful in some contexts like mobile apps, and games, but may not be worth it for all web apps. It also makes for cool demos.

所以你有它.在撰写本文时,我对生产应用程序的建议是使用客户端更新,您真正需要速度,但是您不应该因为大量使用方法而感觉自己做错了.

至于未来,我认为在1.0之后我们将开始在客户端和服务器上看到内置模式实施等内容,这将大大有助于解决我的问题.我认为Collection2是朝这个方向迈出的重要的第一步,但我还没有以任何有意义的方式尝试过它.

存根

逻辑后续问题是“为什么不使用存根?”.我花了一些时间来调查这个,但得出的结论是方法存根对我们的项目没有用,原因如下:

>我喜欢将服务器代码保存在服务器上. Stubbing要求我将所有模型代码发送到客户端,或者再次选择性地重复部分代码.在一个大型应用程序中,我不认为这是实际的.>我发现将客户端上可能运行或未运行的内容分离出来作为维护挑战所需的开销.>为了使存根除了拒绝数据库变异之外还要做任何事情,你需要有一个允许规则 – 否则你最终会有很多UI闪烁(客户端允许写入但服务器立即使它无效).但是有一个允许规则会破坏整个点,因为用户仍然可以从控制台写入数据库.

0

精彩评论

暂无评论...
验证码 换一张
取 消