文档建议使用Meteor.methods
创建安全的方法。
用户是否可以在浏览器的控制台中编写代码,以允许用户绕过安全性并将任意数据发送到服务器数据库(MongoDB)?如果没有,为什么不呢?
答案 0 :(得分:2)
是的,但前提是该方法无法检查其输入和上下文。幸运的是,meteor提供了使这项任务非常简单的工具。让我们看一下我用来回答this question的示例方法。 sendMessage
是一种允许用户在聊天室中发送消息的方法:
Meteor.methods({
sendMessage: function(message, roomId) {
check(message, String);
check(roomId, String);
if (!this.user)
throw new Meteor.Error(401, 'You must be logged in.');
if (_.isEmpty(message))
throw new Meteor.Error(403, 'Message must not be empty.');
var room = Rooms.findOne(roomId);
if (!room)
throw new Meteor.Error(404, 'Room not found.');
if (!_.contains(room.members, this.userId))
throw new Meteor.Error(403, 'You are not in the room.');
return Messages.insert({
userId: this.userId,
roomId: roomId,
message: message
});
}
});
以下是验证:
将此与sendMessage
Meteor.methods({
sendMessage: function(message, roomId) {
return Messages.insert({
userId: this.userId,
roomId: roomId,
message: message
});
}
});
此处,任何连接的客户端都可以打开终端并开始将消息注入任何聊天室。更糟糕的是,message
可能成为一个对象,并对其他客户造成各种意外后果。
没有安全的免费午餐 - 你应该验证一切并假设最坏的情况。但是,如果你努力,你实际上可以生成高度安全的方法。
我强烈建议您仔细阅读Emily Stark的Meteor Meets Mallory演讲,并详细介绍这些观点。