Javascript 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

我正在用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请求后使用它来验证输入。当我只验证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函数