[英]Meteor accounts-password client-side account creation security
我正在使用Meteor创建一个Web应用程序,并且我对帐户创建的安全性有些担忧。 我知道我可以使用Meteor方法解决此问题,但是这样做的好处是您可以在创建帐户后立即登录用户。
我目前没有任何东西可以验证我的输入,以使其变得简单:
Template.register.events({
'submit form': function (e) {
e.preventDefault();
var userInfo = {
email: e.target.registerEmail.value,
password: e.target.registerPassword.value,
password_confirmation: e.target.registerPasswordConfirmation.value
};
check(userInfo, {
email: String,
password: String,
password_confirmation: String
});
//Do some checks on the passwords and email before trying to create account
Accounts.createUser({
email: userInfo.email,
password: userInfo.password,
profileComplete: false
});
}
});
这很好用,这是accounts-ui程序包的工作方式。 问题是,我可以通过在控制台中像下面这样简单地编写一个javascript命令来绕过任何输入验证(并且我也在仅运行accounts-ui和accounts-password软件包的应用程序上检查了此验证):
Accounts.createUser({
email: "NotAnEmail",
password: "123"
});
这将使用所示的电子邮件和密码创建一个用户并登录。这似乎是accounts-ui程序包的巨大缺陷,或者也许我只是缺少了什么? 在确保您不能从控制台进行任何JavaScript注入来绕过输入检查的同时,还有什么方法仍然允许客户端帐户创建?
对于任何对安全性有同样担忧的人,我发现有一个Meteor挂钩,可以在发送Accounts.createUser请求之后使用它来验证输入。 当我仅验证电子邮件字段并添加额外的字段profileComplete时,代码就是这样。
Accounts.onCreateUser(function(options, user) {
if (! validateEmail(options.email))
throw new Meteor.Error(400, 'There was an error processing your request');
user.profileComplete = options.profileComplete;
return user;
});
validateEmail是我定义的自定义函数,而不是本机Meteor函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.