Express.js, как использовать безопасность при входе в систему и после нее

У меня есть веб-приложение, созданное в express.js с базой данных postgresql. Мне было интересно, как реализовать безопасность, но все используют что-то свое (думаю, это хорошо?). Различные модули, разные последовательности аутентификации и т. д. Что у меня есть на данный момент: 1) сообщение формы пользователя, например, /login 2) маршрут приложения к определенному маршруту 3) в маршруте я пробую следующее

var localconstring = "postgres://" + usr + ":" + pass + "@ip:port/db";
var client = new pg.Client(localconstring);
client.on('drain', client.end.bind(client)); 
client.connect(function (err, client, done) {

База данных использует md5, поэтому проход уже защищен базой данных.

Что должно произойти на самом деле? Должен ли я солить и хэшировать имя пользователя и пароль, а затем сохранять соленые/хешированные учетные данные вместе с солью, а затем также использовать md5 базы данных? Если да то какой модуль?

Должен ли я входить в систему таким образом или пытаться сделать выбор * из pg_roles/users ??

Большое спасибо! (относительно соли и хеша, если возможно, несколько подробных примеров, поскольку я хорошо знаком с безопасностью аутентификации)

Забыл упомянуть. куки.. После аутентификации я установил следующие куки:

res.cookie('user', req.body.lguser.username, { signed: true })
res.cookie('watcher', o, { signed: true })

И посмотрите их потом

req.signedCookies.user !== undefined

Безопасен ли подписанный атрибут?


person czioutas    schedule 29.11.2013    source источник


Ответы (2)


Вы должны сгенерировать ключ. Этот ключ должен быть сохранен в файле cookie и в базе данных. Затем, когда пользователь создает петицию, вы можете получить ключ в файле cookie и выполнить поиск пользователя в базе данных.

В этом вам помогут библиотеки, взгляните на Passportjs:

http://passportjs.org/

person user1932958    schedule 29.11.2013
comment
извините, если я покажусь грубым, но ваш ответ не приближается к сложности вопроса, это скорее прямой ответ из коробки. Зачем использовать хэш и соль на стороне сервера, а не модуль pgcrypto для базы данных и хэша и солить их там? или даже сделать оба hashnsalt на сервере, а затем повторно хешировать и сохранить на столе с помощью модуля pgcrypto. - person czioutas; 30.11.2013

Прежде всего, md5 больше НЕ является безопасным, поэтому я бы рекомендовал вам использовать «sha512».

Фрагмент будет примерно таким:

var crypto = require('crypto');
var salt = crypto.pseudoRandomBytes(32);
crypto.pbkdf2(userPassword,salt,1024,32,function(err,finalPassword){
    //on the db you save the salt as a field and the SALTEDPASSWORD !!
    //in this case the finalPassword
}

Поэтому, когда пользователь входит в систему, вы получаете пользователя из базы данных по имени пользователя и делаете следующее:

//after getting the user from DB recalculate the hash
crypto.pbkdf2(passw,user.salt,1024,32,function(err,corrPass){
  if(corrPass.toString() == user.password.toString()) // log in the user
  //where user.password is the result from the db query
}

И я рекомендую использовать паспорт, как сказал другой чувак, это упрощает все файлы cookie.

Надеюсь, это помогло!

person Leonardo    schedule 11.03.2014