Meteorjs模型/集合可在客户端访问。安全问题?

Meteorjs模型/集合可在客户端访问。安全问题?,meteor,Meteor,如何防止用户访问/修改客户端模型/集合?如Matt所述,不再需要解决方法。但是,按照标准,似乎需要删除自动发布软件包以保护系统。Meteor文档包括保护集合的安全:使用并定义每个客户端允许进行的数据库更改 从文件中: 当客户端对集合调用insert、update或remove时,将在服务器上调用集合的allow和deny回调,以确定是否应允许写入。如果至少有一个允许回调允许写入,而没有拒绝回调拒绝写入,则允许写入继续 这些检查仅在客户端尝试直接写入数据库时运行,例如从事件处理程序内部调用upda

如何防止用户访问/修改客户端模型/集合?

如Matt所述,不再需要解决方法。但是,按照标准,似乎需要删除自动发布软件包以保护系统。Meteor文档包括保护集合的安全:

使用并定义每个客户端允许进行的数据库更改

从文件中:

当客户端对集合调用insert、update或remove时,将在服务器上调用集合的allow和deny回调,以确定是否应允许写入。如果至少有一个允许回调允许写入,而没有拒绝回调拒绝写入,则允许写入继续

这些检查仅在客户端尝试直接写入数据库时运行,例如从事件处理程序内部调用update。服务器代码受信任,不受允许和拒绝限制。这包括使用Meteor.call调用的方法——它们需要自己进行访问检查,而不是依赖于允许和拒绝

您可以任意多次调用allow,每次调用都可以包含插入、更新和删除函数的任意组合。如果函数认为应该允许该操作,则应返回true。否则,它们应该返回false,或者根本不返回任何内容(未定义)。在这种情况下,Meteor将继续搜索集合上的任何其他允许规则


欢迎来到SO!你的问题太笼统了。向我们展示您迄今为止所做的尝试。据我所知,没有办法阻止用户访问客户端对象=\Meteor 0.5.0添加了
allow
deny
,这两种方法完全满足您的需要。此外,为了确保读取安全,只需返回一个游标,其查询在
Meteor.publish
函数中使用
this.userId
。您还需要运行
$meteor remove autopublish unsecure
以关闭初学者选项,该选项将所有数据发布到客户端,并允许从客户端进行大多数更改。正如我今天学到的,您不能使用
deny
,除非您还使用
allow
。它被隐藏在文档中,因为“如果您从未对集合设置任何允许规则,则所有客户端对集合的写入都将被拒绝,并且只能从服务器端代码写入集合。”