Expressjs 隐藏敏感 POST 信息

Expressjs Hidden Sensitive POST Information

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

形式:

<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);
        });
    }));

标准做法,不用担心。例如,在登录 Facebook 时检查您发送的内容。请确保在生产中使用 SSL,它可以保护敏感信息。

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

有关比较的更多说明,请查看