流星有哪些安全机制?[关闭]


92

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

如果有任何客户端可以访问持久性API,那么如何保护其应用程序呢?

流星提供了哪些安全机制,应在什么情况下使用它们?


6
我喜欢这个问题已经得到解决,但是他们确实应该在视频中提到这一点。我认为几乎所有观看它的Web开发人员都将在10秒钟之内想到这个问题,直到它结束为止,并且感到很烦恼的是,对于如此出色的产品,他们似乎完全忽略了明显的安全性问题。
Naatan 2012年

6
流星0.5.0添加的用户认证meteor.com/blog/2012/10/17/...
hipertracker

您可以对此重新措辞以使其重新打开。也许“我应该采取什么安全措施?” 或“可以使用哪些安全选项?”
joeytwiddle13年

1
基于意见??我认为这是一次重新审核,因为它显然不是基于意见的。
bjb568 2014年

我有点同意,基于意见的裁定是脱离上下文的-答案基于真实事实。
Olivier Refalo 2014年

Answers:


64

使用流星命令创建应用程序时,默认情况下,该应用程序包含以下软件包:

  • 自动发布
  • 不安全

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

要添加更多内容,Meteor支持Facebook / Twitter /和Much More软件包来处理身份验证,而最酷的是Accounts-UI软件包


2
正确的流星为0.5
Olivier Refalo 2012年

5
默认情况下不安全。kes
Judah Gabriel Himango 2013年

16
@JudahHimango 不安全仅用于测试目的,在准备生产时删除这两个软件包就像meteor remove autopublish insecure
BenjaminRH

1
那流星法呢?即使卸载了不安全的客户端,客户端也可以从控制台访问它们,因为它们是在服务器上运行的。如何使它们安全?
Matanya

2
@Matanya,但是从控制台使用并执行这些命令时,它将引发access denied错误。看看这个。
2014年

35

集合文档中说:

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


1
还可以在Quora上找到这个线程,并得到一个流星开发人员的回答:quora.com/Meteor-web-framework/Whats-cool-about-Meteor/answer/…– dentarg 2012
6

1
@jonathanKingston链接已断开,您能否更新它?
卡洛斯·巴塞罗那

@CarlosBarcelona域已过期,并且该文章早于Meteor中的安全更新。我认为可以说已经过时了。因此我删除了此评论,以节省人们的时间。谢谢
jonathanKingston

5

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

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

此外,他们现在还添加了内置的AUTH模块,可让您登录和注册。因此安全。就您所关心的XSS,Valiations,客户端标头等而言

但您随时可以通过部署到node将流星应用转换为可正常运行的nodejs应用。因此,如果您知道如何保护Node.js应用程序,则应该能够保护流星。


1
截至2012
Olivier Refalo

2

从0.6.4版本开始,在开发模式期间,is_client和is_server块仍然都进入客户端系统。当您关闭开发模式时,我不能说这些是否分开。

但是,如果不是这样,则黑客可以通过查看if(Meteor.is_server)代码块来从系统中获取洞察力。这尤其使我感到担忧,尤其是因为我指出,到目前为止,我仍然无法将Collection隔离到客户端和服务器上的单独文件中。

更新资料

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

我想看看是否只是无法在客户端和服务器目录中隔离客户端和服务器集合。实际上,这没有问题。

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


1
解决方案是将您的代码保存在服务器/文件夹中,这样就不会将其推送到客户端。
Olivier Refalo

DRM,请参阅docs.meteor.com/#structuringyourapp -不需要敏感的代码被传递到客户端
emgee

尝试简单的事情;在服务器文件中创建一个集合,然后在客户端文件中创建该集合,然后告诉我会发生什么。接下来,使用集合的声明创建一个根文件,然后在服务器和客户端目录文件中简单引用该文件,然后告诉我会发生什么。如果您无法像我一样无法创建集合,那么如何独立引用这些集合?最后,您需要对集合的引用以存在于同一客户端可用文件中,并使用is_server和is_client。我希望我错了,但是我还没有找到如何或为什么。
DrM

嗯,奇怪,测试似乎很好,将更新答案
DrM

该链接是简单代码的存储库,但是似乎可以正常工作,不确定过去发生了什么奇怪的错误或如何重新创建它们。
DrM 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.