Javascript Meteor帐户密码客户端帐户创建安全性
我正在用Meteor创建一个web应用程序,我对帐户创建的安全性有些担心。我知道我可以通过使用Meteor方法解决这个问题,但在客户端这样做的好处是,在创建帐户后,您可以立即让用户登录 我目前没有任何东西来验证我的输入以使其变得简单:Javascript Meteor帐户密码客户端帐户创建安全性,javascript,security,meteor,meteor-accounts,javascript-injection,Javascript,Security,Meteor,Meteor Accounts,Javascript Injection,我正在用Meteor创建一个web应用程序,我对帐户创建的安全性有些担心。我知道我可以通过使用Meteor方法解决这个问题,但在客户端这样做的好处是,在创建帐户后,您可以立即让用户登录 我目前没有任何东西来验证我的输入以使其变得简单: Template.register.events({ 'submit form': function (e) { e.preventDefault(); var userInfo = { email
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请求后使用它来验证输入。当我只验证email字段并添加额外字段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函数