我知道这是一个多次问过的问题。但是当我试图在流星中开发安全代码时,我仍然关注最佳实践。
我知道您可以使用以下命令阻止客户端访问数据库:
meteor remove insecure
我的代码目前添加,使用Meteor.methods()检索记录,因此尽管客户端无法将数据插入集合,但它可以使用Meteor.method()函数。我担心在数据库中保存登录详细信息,因为这并不意味着客户端可以使用Meteor.method()函数来添加/获取/删除数据库中的数据。
客户端能够调用Meteor.methods()函数似乎仍然保持相同的风险吗?或者我把我的工作编码错了?
如果它有帮助,这是我的工作正在做的事情:
第2步是风险,因为它似乎允许客户端获取登录详细信息。一旦它有这个,它使用socket.io.js库和我的webservice的api登录。所以meteor remove insecure
似乎没有得到它,因为在Meteor.methods()中仍然可以使用get方法吗?
能够使用这些功能对于从数据库中检索数据至关重要,有没有办法解决这个问题?在不将私有数据暴露给客户端的情况下与数据库进行通信的最佳做法是什么?
答案 0 :(得分:0)
Meteor的insecure
软件包只是MDG为快速构建应用程序原型而提供的工具。它并不打算在生产应用程序中运行,有些人认为从一开始就将它们全部删除是最佳做法。
删除此软件包后,如果要使用mini-mongo与客户端上的数据库进行交互,则必须在集合上创建适当的allow
和deny
规则。以下是关于此主题的Meteor文档的the link。正如您所说,使用Meteor.methods()
进行与数据库交互的另一种方式。
Meteor方法调用不会触发允许或拒绝规则,因为它们是在服务器上运行的。您必须自己硬连接Meteor Call所需的所有安全措施。因此,如果您没有花时间来保护呼叫,那么这可能是一个安全问题。
关于验证您的客户,我建议您查看Meteor's Accounts
包。例如,您可以添加这两个软件包以进行基本用户名/密码验证:
meteor add accounts-base accounts-passwords
然后您可以使用Meteor Documentation上详述的方法。
我希望这会有所帮助。
答案 1 :(得分:0)
如果您使用的是accounts-password
,则可以查看source here以查看其工作原理的详细信息。但这是对它的粗略概述。当您致电Meteor.loginWithPassword
时,密码会在客户端进行哈希处理。然后使用参数调用方法。然后对数据库服务器端加密并检查密码。如果匹配,则客户端登录。然后客户端订阅他们自己的用户数据(Meteor.user()
)。服务器仅发布其数据。所以其他人的数据都是保存的。
一个方法执行代码服务器端。所以他们通常是安全的。但你当然可以编写不安全的方法。只要知道,你不能相信用户传递的参数。