我不想让所有用户都能够插入/销毁数据。如何保护客户端MongoDB API?
回答
[更新]现在有一个官方和文件化的Auth软件包,它提供了不同的解决方案来确保收集。
在一个CRUD水平:
[服务器] collection.allow(选项)和collection.deny(选项)。限制此集合的默认写入方法。一旦在集合上调用其中的任何一种,则无论何种不安全包,该集合上的所有写入方法都会受到限制。
而且还有insecure
从客户端删除完整写访问。
来源:Getting Started with Auth(感谢@丹dascalescu)
[老答案】
显然有对AUTH包工作应该避免任何用户承担完全控制(?)分贝,因为它是现在。还有人建议通过定义自己的突变(方法)来解决现有的解决方案(解决方法),并在尝试执行未经授权的操作时使其失败。我没有得到更好的结果,但我认为这通常是必要的,因为我怀疑Auth Package会让你在行级别实现通常的认证逻辑,但可能只是在CRUD方法上。将不得不看看开发者不得不说的。
[编辑] 找到东西,这似乎证实了我的想法:
目前该客户端是考虑到收集完全写入访问。他们可以执行任意的Mongo更新命令。一旦我们构建身份验证,您将能够限制客户端直接访问插入,更新和删除。我们也在考虑验证器和其他类似ORM的功能。
来源这个答案:
Accessing to DB at client side as in server side with meteor
感谢您的想法和链接! – TK421 2012-04-12 14:29:37
也可以在Quora上找到这个线索,其中一位Meteor开发人员给出了答案:http://www.quora.com/Meteor-web-framework/Whats-cool-about-Meteor/answer/Rory-I-Sinclair/comment/878076 – dentarg 2012-06-17 18:24:14
@nrako:你可否更新答案以提及https://github.com/meteor/meteor/wiki/Getting-Started-with-Auth? – 2012-10-10 07:59:23
虽然没有记录的方式做到这一点的是,这里的一些代码,应该做你想要什么:
Foo = new Meteor.Collection("foo");
...
if (Meteor.is_server) {
Meteor.startup(function() {
Meteor.default_server.method_handlers['/foo/insert'] = function() {};
Meteor.default_server.method_handlers['/foo/update'] = function() {};
Meteor.default_server.method_handlers['/foo/remove'] = function() {};
});
}
这将禁用默认的插入/更新/删除方法。客户端可以尝试插入数据库,但服务器不会执行任何操作,客户端将在服务器响应时通知并删除本地创建的项目。
插入/更新/删除仍然可以在服务器上工作。您需要使用在服务器上运行的Meteor.methods来完成任何数据库写入。
当认证分支着陆时,所有这些都会改变。一旦发生这种情况,您将能够提供验证器来检查和授权服务器上的数据库写入。这里有一个更详细一点:http://news.ycombinator.com/item?id=3825063
非常感谢所有的信息!不能等待看到这个成熟。 – TK421 2012-04-12 14:29:22
是否有可能确保从客户端读取集合? – HansPinckaers 2012-05-03 12:29:59
没关系;只是删除自动发布。 '流星移除自动发布' – HansPinckaers 2012-05-08 18:51:28
一个更简洁的方式:
_.each(['collection1', 'collection2'], function(collection){
_.each(['insert','update', 'remove'], function(method){
Meteor.default_server.method_handlers['/' + collection + '/' + method] = function(){}
});
});
或使其更地道:
延长流星:
_.extend(Meteor.Collection.prototype, {
remove_client_access: function(methods){
var self = this;
if(!methods) methods = ['insert','update','remove'];
if(typeof methods === 'String') methods = [methods];
_.each(methods, function(method){
Meteor.default_server.method_handlers[self._prefix + method] = function(){}
});
}
});
电话是简单的:
List.remove_client_access() // restrict all
List.remove_client_access('remove') //restrict one
List.remove_client_access(['remove','update']) //restrict more than one
只是想提一下,这是不再需要的,因为v0.5.0引入了认证。请参阅http://docs.meteor.com/#accounts_api。 @greg:任何你可以更新你的答案的机会? – 2012-11-08 06:49:59
我是新来的流星,但我所遇到到目前为止这两点
您可以限制哪些客户端可以在数据库中通过在服务器端
publish
添加参数到find
命令访问命令。然后,当客户端调用Collection.find({})
,返回的结果对应于在服务器端会是什么,例如,Collection.find({user: this.userId})
(见Publish certain information for Meteor.users and more information for Meteor.user和http://docs.meteor.com/#meteor_publish)中内置一件事(我有流星0.5。 9)是,客户端只能通过编号为
update
的项目,而不使用选择器。如果有不符合的尝试,则会向客户端上的控制台记录错误。403: "Not permitted. Untrusted code may only update documents by ID."
(见Understanding "Not permitted. Untrusted code may only update documents by ID." Meteor error)。
鉴于数2,您需要使用Meteor.methods
在服务器端进行远程过程调用可用来与Meteor.call
客户端。
- 1. 如何保护Oauth 2.0客户端ID和客户端密钥
- 2. 如何在客户端保护socket.io?
- 3. 保护HTTPS客户端
- 4. 保护客户端json
- 5. Mongodb客户端javascript api
- 6. 如何保护在JavaScript/Ajax客户端[apigee]中使用的API?
- 7. 保护客户端机器上的客户端密码
- 8. 保护客户端数据安全
- 9. 从Java客户端保护数据库
- 10. 保护密码客户端Firebase
- 11. 春季OAuth2客户端,CSRF保护
- 12. 保护客户端Java应用程序
- 13. 保护客户端逻辑和数据
- 14. Java客户端.class文件保护
- 15. 公司如何保护JavaScript客户端库?
- 16. 如何保护WebAPI应用程序/ HTML + JS客户端?
- 17. 如果从跨域客户端调用CSRF攻击,如何保护Web API?
- 18. 保护仅限JavaScript的客户端以访问远程API
- 19. 保护REST API以供Android客户端使用
- 20. 保护客户端(JavaScript,Android,iOS等)上的API密钥
- 21. 使用客户端令牌保护REST API调用
- 22. 如何使用OAuth保护客户端脚本,如小部件?
- 23. 如何使用PassportJS保护API端点?
- 24. 如何保护Web API 2.0端点?
- 25. 如何隐藏或保护客户端的JavaScript代码
- 26. 如何保护客户端/服务器socket通信
- 27. 如何从java客户端获得受保护的Web资源
- 28. 如何保护客户端使用的AES密码?
- 29. 如何在客户端Javascript中保护Firebase
- 30. 如何保护Vue.js中的客户端路线?
看到[这个问题](http://stackoverflow.com/questions/10099843/how-secure-is-meteor/10099890) – pomber 2012-04-11 23:09:11