【问题标题】:What security mechanisms does Meteor have? [closed]Meteor 有哪些安全机制? [关闭]
【发布时间】:2012-04-23 09:33:27
【问题描述】:

我们都知道 Meteor 提供了 miniMongo 驱动程序,它允许客户端无缝访问持久层 (MongoDB)。

如果任何客户端都可以访问持久性 API,如何保护他的应用程序?

Meteor 提供了哪些安全机制以及它们应该在什么情况下使用?

【问题讨论】:

  • 我喜欢这个问题已经得到解决,但他们真的应该在视频中提到这一点。我认为几乎所有观看它的 Web 开发人员都会在 10 秒内想到这个问题,直到它结束,并且对于如此出色的产品他们似乎完全忽略了明显的安全问题感到恼火。跨度>
  • Meteor 0.5.0 添加用户认证meteor.com/blog/2012/10/17/…
  • 您可以稍微改写一下以重新打开它。也许“我应该采取什么安全措施?”或“有哪些安全选项可用?”
  • 基于意见?笏?我认为这是一次重新审核,因为它显然不是基于意见的。
  • 我有点同意,基于意见的裁决与上下文无关 - 答案基于真实事实。

标签: mongodb security meteor


【解决方案1】:

当您使用meteor 命令创建应用时,该应用默认包含以下包:

  • 自动发布
  • 不安全

它们共同模拟了每个客户端对服务器数据库具有完全读/写访问权限的效果。这些是有用的原型设计工具(仅用于开发目的),但通常不适合生产应用程序。当您准备好发布产品时,只需删除这些软件包即可。

补充一点,Meteor 支持Facebook / Twitter / and Much More 包来处理身份验证,最酷的是Accounts-UI

【讨论】:

  • 从流星 0.5 起正确
  • 默认不安全。哎呀。
  • @JudahHimango 仅用于测试目的不安全,当您准备好投入生产时删除这两个包就像meteor remove autopublish insecure 一样简单。
  • 流星方法呢?即使卸载了不安全的客户端,客户端也可以从控制台访问它们,因为它们是在服务器上运行的。如何确保它们的安全?
  • @Matanya 但是在从控制台使用和执行它们时,它会抛出一个access denied 错误。看看吧。
【解决方案2】:

collections doc 中说:

目前,客户端被授予对集合的完全写入权限。 他们可以执行任意 Mongo 更新命令。一旦我们建立 身份验证,您将能够限制客户端的直接访问 插入、更新和删除。我们也在考虑验证器和 其他类似 ORM 的功能。

【讨论】:

  • 在 Quora 上也可以看到这个帖子,上面有一位 Meteor 开发者的回答:quora.com/Meteor-web-framework/Whats-cool-about-Meteor/answer/…
  • @jonathanKingston 链接已损坏,您能更新一下吗?
  • @CarlosBarcelona 域已过期,并且文章早于 Meteor 的安全更新。我认为可以说它已经过时了。所以我删除了评论以节省人们的时间。谢谢
【解决方案3】:

如果您正在谈论限制客户端不使用任何未经授权的插入/更新/删除 API,那是可能的。

https://github.com/meteor/meteor/tree/171816005fa2e263ba54d08d596e5b94dea47b0d/examples/todos查看他们的待办事项应用程序

此外,他们现在添加了一个内置的 AUTH 模块,可让您登录和注册。所以它是安全的。只要您处理 XSS、验证、客户端标头等。

但是您可以随时通过部署到 node.js 将流星应用程序转换为完全工作的 nodejs 应用程序。因此,如果您知道如何保护 nodejs 应用程序,您应该能够保护流星。

【讨论】:

  • 这在 2012 年 9 月完全正确
【解决方案4】:

从 0.6.4 开始,在开发模式下,is_client 和 is_server 块仍然都进入客户端系统。当你关闭开发模式时,我不能说这些是否被隔离。

但是,如果不是,黑客可能会通过查看 if(Meteor.is_server) 代码块从系统中获得洞察力。这让我特别担心,尤其是因为我注意到我仍然无法将集合分离到客户端和服务器上的单独文件中。

更新

好吧,关键是不要将与安全相关的代码放在非服务器目录中的 is_server 块中(即 - 确保它位于 /server 下的某个东西中。

我想看看我是否只是因为无法在客户端和服务器目录中分离客户端和服务器集合而发疯。其实这个没有问题。

这是我的测试。这是发布/订阅模型的一个简单示例,似乎工作正常。 http://goo.gl/E1c56

【讨论】:

  • 解决方案是将代码保存在 server/ 文件夹中 - 这样它就不会被推送到客户端。
  • DrM,请看docs.meteor.com/#structuringyourapp——敏感代码不需要交付给客户
  • 尝试一些简单的事情;在服务器文件中创建一个集合,然后在客户端文件中创建相同的集合并告诉我会发生什么。接下来,使用集合的声明创建一个根文件,然后在服务器和客户端目录文件中简单地引用它并告诉我会发生什么。如果你不能像我一样创建集合,你怎么能独立引用这些?最后,您需要对集合的引用存在于同一个客户端可用文件中,并使用 is_server 和 is_client。我希望我错了,但我还没弄明白怎么做或为什么。
  • 嗯,奇怪,测试好像没问题,会更新答案
  • 该链接是简单代码的回购,但似乎工作正常,不知道过去有什么奇怪的错误或我如何重新创建它们。
猜你喜欢
  • 2011-08-24
  • 2020-10-24
  • 2020-11-06
  • 1970-01-01
  • 2013-12-18
  • 2014-01-16
  • 2016-02-10
  • 2021-07-24
  • 2019-06-15
相关资源
最近更新 更多