【问题标题】:MeteorJS Removing insecure Security Flaw?MeteorJS 删除不安全的安全漏洞?
【发布时间】:2015-07-01 12:23:06
【问题描述】:

我知道这是一个被问过很多次的问题。但在尝试在流星中开发安全代码时,我仍然关注最佳实践。

我知道您可以使用以下命令阻止客户端访问数据库:

meteor remove insecure

我的代码目前使用 Meteor.methods() 添加、检索记录,因此尽管客户端无法将数据插入集合中,但它可以使用 Meteor.method() 函数。我担心在数据库中保存登录详细信息,因为这并不意味着客户端可以使用 Meteor.method() 函数从数据库中添加/获取/删除数据。

能够调用 Meteor.methods() 函数的客户端似乎仍然保持相同的风险,不是吗?还是我的编码有误?

如果有帮助,以下是我的工作内容的简要说明:

  1. 应用程序加载
  2. 客户端调用从数据库中获取用户名和密码
  3. 客户端将登录详细信息发送到外部服务器(通过 https)以启动 socket.io 连接。

第 2 步是有风险的,因为它似乎允许客户端获取登录详细信息。一旦有了这个,它就会使用 socket.io.js 库和我的 web 服务的 api 来登录。所以meteor remove insecure 似乎没有保护它,因为 get 方法在 Meteor.methods() 中仍然可用?

能够使用这些功能对于从数据库中检索数据至关重要,有没有办法解决这个问题?在不向客户端公开私有数据的情况下与数据库进行通信的最佳做法是什么?

【问题讨论】:

  • 你问的问题太多了。请将您的帖子缩小到几个本地化的精确问题。您的问题也不清楚(我仍然几乎不知道您的应用程序中发生了什么)。请edit你的帖子。

标签: mongodb security meteor socket.io privacy


【解决方案1】:

Meteor 的insecure 包只是 MDG 提供的用于快速原型应用程序的工具。它不适合在生产应用程序中运行,有些人认为从一开始就将其全部删除是最佳做法。

删除此包后,如果您想使用 mini-mongo 与客户端上的数据库交互,您必须在集合上创建适当的 allowdeny 规则。这里是 the link 有关此主题的 Meteor 文档。与数据库交互的另一种方式,如您所说,使用Meteor.methods()

Meteor 方法调用不会触发允许或拒绝规则,因为它们是在服务器上运行的。您必须自己硬连线您在 Meteor Call 上需要的所有安全措施。因此,如果您不花时间保护通话,这可能是一个安全问题。

关于验证您的客户,我建议您查看Meteor's Accounts 包。例如,您可以添加这两个包用于基本的用户名/密码验证:

meteor add accounts-base accounts-passwords

那么你就可以使用Meteor Documentation上详述的方法了。

我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    登录

    如果您使用的是accounts-password,您可以查看source here 以了解其工作原理的详细信息。但这里有一个粗略的概述。当您调用Meteor.loginWithPassword 时,密码会在客户端进行哈希处理。然后使用参数调用方法。然后将密码加盐并在数据库服务器端进行检查。如果匹配,则客户端登录。然后客户端订阅他们自己的用户数据 (Meteor.user())。服务器只发布他们的数据。所以其他人的数据都被保存了。

    方法

    一个方法在服务器端执行代码。所以它们通常是安全的。但是您当然可以编写不安全的方法。只要知道,您不能信任用户传递的参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-24
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多