假设我正在使用meteor.js构建应用程序,我只是从用户那里收集一些简单的表单数据。也许是对一个简单问题的回答。他们无需登录即可提交数据。
如何保护我的应用免受在Chrome控制台中创建js-loop的人员的影响?只需在我的数据库中插入垃圾?
我可以通过以下方式保护删除和更新:
Formanswers.allow({
insert: function () {
return true;
},
update: function () {
return false;
},
remove: function () {
return false;
},
});
如果用户已登录(我记得在我的应用中不是这种情况),我可以为每个插入添加时间戳并检查以下内容:
insert: function (userId, doc) {
if (userId && (Formanswers.findOnd({userid: userId, time: SOMETHING TIME SPECIFIC}).count() < 1)) return true;
},
所以我的问题是:有没有其他方法可以为匿名(未登录)用户获取唯一的userId-thing或IP地址或东西,所以我也可以对他进行上述检查?
谢谢!
答案 0 :(得分:13)
你可以使用陨石包。
帐户匿名
https://github.com/tmeasday/meteor-accounts-anonymous
所以你使用
Meteor.loginAnonymously();
如果用户第一次访问您的网页,并使用.allow检查您需要的内容
答案 1 :(得分:1)
要获取IP地址,天文台(https://github.com/jhoxray/observatory)项目使用此:
在咖啡中:
Meteor.userIP = (uid)->
ret = {}
if uid?
s = ss for k, ss of Meteor.default_server.sessions when ss.userId is uid
if s
ret.forwardedFor = s.socket?.headers?['x-forwarded-for']
ret.remoteAddress = s.socket?.remoteAddress
ret
返回像{ forwardedFor: '192.168.5.4', remoteAddress: '192.168.5.4' }
答案 2 :(得分:0)
使用会话或localStorage密钥。当访问者提交表单时,检查是否已设置密钥,如果已设置,则拒绝插入。
答案 3 :(得分:0)
您可以这样做:
if (Meteor.isClient) {
Meteor.startup(function () {
Session.set('currentuser', 'something randomly generated by another function');
}
}
并检查数据库中是否已插入'currentuser'。