我们都知道Meteor提供了miniMongo驱动程序,它可以无缝地允许客户端访问持久层(MongoDB)。
如果任何客户端可以访问持久性API,那么如何保护其应用程序?
Meteor提供的安全机制有哪些,以及它们应在何种上下文中使用?
答案 0 :(得分:64)
使用meteor命令创建应用程序时,默认情况下该应用程序包含以下软件包:
这些模仿了每个客户端对服务器数据库具有完全读/写访问权限的效果。这些是有用的原型设计工具(仅限开发目的),但通常不适用于生产应用程序。当您准备好发布产品时,只需删除这些包。
要添加更多内容,Meteor支持Facebook / Twitter / and Much More个包来处理身份验证,最酷的是Accounts-UI包
答案 1 :(得分:35)
在collections doc中说:
目前,客户端获得对该集合的完全写入权限。 他们可以执行任意Mongo更新命令。一旦我们建立 身份验证,您将能够限制客户端的直接访问 插入,更新和删除。我们也在考虑验证者和 其他类似ORM的功能。
答案 2 :(得分:5)
如果您正在讨论限制客户端不使用任何未经授权的插入/更新/删除API,那就可能。
在https://github.com/meteor/meteor/tree/171816005fa2e263ba54d08d596e5b94dea47b0d/examples/todos
上查看他们的待办事项应用此外,他们现在添加了一个内置的AUTH模块,可以让您登录和注册。所以它的安全。至于您正在处理XSS,Valiations,客户端标题等。
但是你可以通过部署到节点来将meteor应用程序转换为完全正常工作的nodejs应用程序。因此,如果您知道如何保护nodejs应用程序,您应该能够保护流星。
答案 3 :(得分:2)
从0.6.4开始,在开发模式期间,is_client和is_server块仍然都进入客户端系统。我不能说当你关闭开发模式时这些是否被隔离。
但是,如果不是这样,黑客可以通过查看if(Meteor.is_server)代码的块来从系统中获得洞察力。这尤其令我担忧,特别是因为我注意到我仍然无法将集合分离到客户端和服务器上的单独文件中。
嗯,关键是不要将安全相关的代码放在非服务器目录中的is_server块中(即 - 确保它位于/ server下面。
我想看看我是否只是无法在客户端和服务器目录中分离客户端和服务器集合。事实上,这没有问题。
这是我的测试。这是发布/订阅模型的一个简单示例,似乎可以正常工作。 http://goo.gl/E1c56