在AngularJS spa中使用没有任何令牌的expess-session进行用户身份验证是否安全?
无论如何,用户可以修改会话客户端吗?
登录时,请使用凭据(电子邮件,密码)
发送请求connection.query( 'SELECT username, password, emailCode FROM `user` WHERE `email` = ?', [ email ], function ( error, results, fields ) {
if( error ) console.log( error );
if( !results.length ) return res.json( { err: 'Invalid password or email address' } ); // invalid email
if( !bcrypt.compareSync( password, results[ 0 ].password ) ) return res.json( { err: 'Invalid password or email address' } ); // invalid password
req.session.username = results[ 0 ].username;
req.session.email = email;
req.session.loggedIn = true;
res.json( { username: req.session.username, msg: 'Successfully logged in' } );
} );
在快速路由中,这样的登录检查如下:
app.get( '/views/user/:name', function( req, res ) {
var name = req.params.name;
if ( typeof req.session.loggedIn !== 'undefined' && req.session.loggedIn ) {
return res.sendFile( 'views/user/' + name, { root: __dirname + '/public/' } );
} else {
return res.sendFile( 'views/error.html', { root: __dirname + '/public/' } );
}
} );
如果req.session.loggedIn为true,则每个客户端需要的数据都通过http get请求并返回用户信息或其他任何内容
似乎工作正常,但它是否安全?
答案 0 :(得分:2)
根据您使用应用程序配置的会话存储,可以将有关会话中存储的数据的信息发送给客户端。也就是说 - 如果您使用cookie来存储会话,那么一些信息将在客户端上,但这些信息是signed cookies,并且用户无法篡改它,只要他们没有'知道在服务器上定义的用于签名的秘密。