我使用MeteorJS
填充应用。现在我需要解决的一个安全问题是,在我的应用程序中,匿名用户可以自由使用:
Meteor.users.find().fetch()
...在控制台中获取所有当前用户'信息。我也有包insecure
&已删除autopublish
。
当我从服务器发布此用户集合时,我这样做了:
Meteor.publish 'users basic info', ->
Meteor.users.find {}, fields:
"emails" :1
"profile" :1
但是当任何客户使用Meteor.users.find().fetch()
检索数据时,他们获得的字段多于我限制的字段,例如position
,roles
等等。
希望你们可以帮助我。非常感谢先进!
答案 0 :(得分:3)
您的发布功能将所有用户文档返回给客户端,因为您有一个空对象作为查询,这就是客户端可以看到所有用户数据的原因。您需要执行以下操作(道歉,但我不使用CS):
Meteor.publish('users basic info', function() {
return Meteor.users.find({
_id: this.userId
}, {
fields: {
profile: 1,
emails: 1
});
});
请注意this.userId
是一个常量,而不是一个反应变量,但是当登录用户更改时(包括从null),整个发布函数会重新运行,所以这应该可以正常工作。
position
,roles
等字段不是profile
的子字段吗?如果它们不存在并且您没有其他用户数据发布功能(并且删除了自动发布),那么为什么您可以在客户端上看到这些字段真的不清楚。