Meteor учетные записи-пароль безопасность создания учетной записи на стороне клиента

Я создаю веб-приложение с Meteor, и у меня есть некоторые опасения по поводу безопасности при создании учетной записи. Я знаю, что могу решить эту проблему, используя метод 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
        });

    }
});

Это прекрасно работает, и именно так это делает пакет account-ui. Проблема в том, что я могу обойти любую проверку ввода (и я проверил это в приложении, работающем только с пакетами учетных записей и учетных записей), просто написав команду javascript в консоли следующим образом:

Accounts.createUser({
    email: "NotAnEmail",
    password: "123"
});

И это создаст пользователя с адресом электронной почты и паролем, как показано, и войдет в него. Это кажется огромным недостатком пакета account-ui, или, может быть, я просто что-то упускаю? Есть ли способ разрешить создание учетной записи на стороне клиента, убедившись, что вы не можете выполнять какие-либо инъекции javascript с консоли, чтобы обойти проверки ввода?


person VictorVH    schedule 18.12.2015    source источник


Ответы (1)


Для тех, у кого есть такие же опасения по поводу безопасности, я обнаружил, что есть хук 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.

person VictorVH    schedule 18.12.2015