gpt4 book ai didi

javascript - Meteor.userId 是可变的

转载 作者:行者123 更新时间:2023-12-03 02:34:10 25 4
gpt4 key购买 nike

在使用 Meteor 时,我发现即使删除了不安全的包,客户端也可以更改 Meteor.userId 函数。例如,

Meteor.userId=function() {return "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"}

可以使用Meteor.default_connection.userId()(重定向函数)来完成。我如何确保这一点?

最佳答案

这是一个很好的问题,因为它展示了 Meteor 安全模型的工作原理。

这里不存在安全问题,因为 Meteor 从不信任客户端代码。

在 Meteor 中,只有服务器决定每个客户端可以访问哪些数据(请参阅 Meteor.publish )以及每个客户端可以更改哪些数据(请参阅 Meteor.allow )。当客户端向服务器进行身份验证时,服务器会存储用户的 ID。在该客户端注销之前,它会将该 ID 作为 userId 提供给服务器上的 Meteor.publishMeteor.allow 函数。

Meteor 还会在客户端上发送用户 ID,因为您当然希望根据登录者更改客户端的行为方式以及屏幕上的内容。正如您所说,我们无法阻止流氓客户端从任意更改任何 JavaScript 代码到更改它认为的用户 ID!但这样做并不会给客户端任何新的权限,因为仍然只有服务器代码做出安全决策。

您可以使用安全方应用程序尝试此操作:

  1. 使用 $meteor create --example party 制作派对应用程序
  2. 创建一个用户帐户并双击 map 以创建队伍。选中此框可将其设为私有(private)聚会。
  3. 打开 JavaScript 控制台并输入 Meteor.userId() 以获取您的用户 ID。
  4. 退出。该队伍将从屏幕上消失,因为服务器不会将其发布给任何其他用户。
  5. 现在,进入控制台并使用返回所需 ID 的新函数覆盖 Meteor.userId()

所以现在你已经让客户端误认为是你的用户了。但服务器更清楚。屏幕上仍然不会出现派对,并且您无法更新派对集合来更改该派对信息。

事实上,将客户端用户 ID 设置为您想要的任何值都是完全安全的!您可以直接进入帐户系统并调用 Meteor.default_connection.setUserId("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee");。尝试一下,你会看到右上角的登录按钮变成了动画。这是因为客户端正在调用 Meteor.user() 来显示您刚刚设置的登录用户的电子邮件地址。但因为您尚未以该用户身份登录服务器,所以它不会发布有关该用户的任何信息,您只会得到旋转。

这是一个非常强大的安全模型。您不必担心任何客户端代码,即使在大多数应用程序中,大部分代码都位于其中!只要您编写安全的服务器方法、发布函数和允许/拒绝规则,无论客户端尝试做什么,您都将被完全锁定。

关于javascript - Meteor.userId 是可变的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13331836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com