【问题标题】:Can unauthorized people read the database from the client side in meteorjs?未经授权的人可以在meteorjs中从客户端读取数据库吗?
【发布时间】:2014-06-04 14:01:43
【问题描述】:

我有这个消息集合,其中包含多个消息对象,每个对象都有一个唯一的 ID。现在用户 X 只能访问 ID 为 123456 的消息对象。现在用户 X 是否可以打开开发人员工具,更改 JS 文件并从 147852 读取消息?

就像用户登录时一样,我检查我的用户集合并获取适当的 ID 并将其分配给名为 msgID 的变量。然后我

message = Meteor.Collection('messages').id(msgID);

这样做以获取消息。用户是否可以将该消息 ID 更改为 104758 之类的静态内容并阅读他/她没有权限的消息?

如果这是一个简单的问题,我很抱歉,但我对 Meteor 和 Stack Overflow 很陌生。

【问题讨论】:

    标签: mongodb meteor client-side database


    【解决方案1】:

    默认情况下,一个新的 Meteor 项目包括包 autopublishinsecure,它们为每个客户端提供对数据库的完全读/写访问权限。这可能对原型设计有用,但对于实际应用程序来说显然不是一个好主意,因此您应该使用$ meteor remove autopublish insecure 删除它们。此时,客户端根本没有访问权限。您必须使用publish/subscribe(用于读取访问)和allow/deny rulesmethods(用于写入访问)重新添加访问权限。

    请参阅documentation 中的相关部分。

    出版物、允许/拒绝规则和方法在服务器上运行。客户可能会弄​​乱他们自己的 Javascript 版本,但这只会影响在他们的客户端上运行的代码。在服务器或其他客户端上运行的代码不受此影响。 回答你的问题:

    • 如果您依赖autopublishinsecure,并在客户端授权访问,那么这是不安全的,因为用户可以更改自己客户端的Javascript 代码来绕过您的客户端授权。
    • 如果您没有使用autopublishinsecure,并且有正确编写的出版物、允许/拒绝规则和/或方法,那么您很好。客户端只能通过该接口进行读写。

    【讨论】:

    • 既然原来的js文件被编辑了,难道用户就没有必要的权限来发出写请求了吗?
    • 您的出版物、方法和允许/拒绝规则在服务器上运行。用户不能更改服务器的代码,只能更改自己的客户端代码。
    • (好吧,你也可以在客户端运行方法,以补偿延迟,但这只会影响客户端的屏幕;服务器的方法版本是权威的。)
    猜你喜欢
    • 2019-07-13
    • 2015-02-01
    • 2020-01-11
    • 2013-08-03
    • 2019-09-06
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    相关资源
    最近更新 更多