Expressjs隐藏敏感的POST信息

时间:2016-08-29 23:40:36

标签: forms express passport.js password-encryption

我有一个使用passport.js身份验证和bcrypt加密密码的注册和登录表单,但我注意到我的POST方法表单提交显示的是纯文本密码值,而不是bcrypt加密。我正在本地测试,但计划启用https。我应该对此感到紧张吗?我应该对我不包括的表单标签进行某种调整吗?

form data

形式:

<h1>Login</h1>
            <form action="/login" method="post">
                <input type="text" class="form-control" id="login-username"  name="email" value="" placeholder="Email">
                <br />
                <input type="password" class="form-control" id="login-password"  name="password" value="" placeholder="Password">
                <div class="login-buttons">
                    <button type="submit">Login</button>
                </div>
            </form>

这是我的登录路线:

siteRoutes.route('/login')

    .get(function(req, res){
        res.render('pages/site/login.hbs',{
            error: req.flash('error')
        });
    })

    .post(passport.authenticate('local', {
        successRedirect: '/app',
        failureRedirect: '/login',
        failureFlash: 'Invalid email or password.'
    }));

Passportjs登录验证:

//Login logic
passport.use('local', new LocalStrategy({
    passReqToCallback: true,
    usernameField: 'email'
},  function(req, email, password, done) {
        console.log("Database query triggered");
        //Find user by email
        models.User.findOne({
            where: { 
            email: req.body.email
            }
        }).then(function(user) {
            if (!user) {
                done(null, false, { message: 'The email you entered is incorrect' }, console.log("Unknown User"));
            } else if (!user.validPassword(password)){
                done(null, false, console.log("Incorrect Password"));
            } else {
                console.log("User match");
                done(null, user);
            }
        }).catch(function(err) {
            console.log("Server Error");
            return done(null, false);
        });
    }));

1 个答案:

答案 0 :(得分:1)

标准练习,无需担心。例如,检查登录Facebook时发送的内容。只需确保在生产中使用SSL,就可以保护敏感信息。

您需要在应用程序中使用纯文本密码来验证它是否与哈希匹配。如果您要发送哈希值并将其与数据库中的哈希值进行比较,那么您的数据库将有效地包含每个用户的纯文本密码。毕竟,哈希只是一个字符串。

有关比较的更多说明,请查看https://stackoverflow.com/a/6833165/3349511