Как хранить пароли в базах данных и файлах cookie (PHP / MySQL) - PullRequest
2 голосов
/ 03 октября 2009

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

То, что я до сих пор придумал (после небольшого прочтения), берет открытый пароль пользователя, заполняя его солью до тех пор, пока он не заполнит 512 бит (64 байта => 64 символа, поскольку страница не является -уникод), а затем делать

$pwhash = hash('sha512', $saltedpw);
for ($i=0; $i<1000; $i++)
      $pwhash = hash('sha512', $pwhash);

Тогда я бы сохранял (UserName, HashedPw, Salt) в базе данных, но что мне делать с cookie (чтобы идентифицировать пользователей, которые хотят остаться без изменений после истечения сеанса)?

Ответы [ 3 ]

7 голосов
/ 03 октября 2009

Во-первых, вызов hash 1000 раз ничего не помогает, достаточно одного раза.

Для запоминания логина пользователя в cookie у вас есть две опции:

  1. Как уже было сказано, вы можете сгенерировать случайный токен и сохранить его в базе данных вместе с пользовательской информацией. Когда пользователь без сессионного cookie входит на сайт, вы проверяете, есть ли cookie с токеном, и выполняете поиск в БД. Если вы нашли пользователя с таким токеном, войдите в него. Возможно, вы захотите выполнить дополнительные проверки, например, совпадает ли текущий IP с IP-адресом при первом входе в систему.
  2. Вы можете сохранить идентификатор пользователя в файле cookie, но затем вам необходимо подписать данные с помощью секретного ключа, чтобы убедиться, что пользователь не может просто изменить его. HMAC -SHA-1 - хороший способ сделать это. Преимущество в том, что вам не нужно хранить какие-либо дополнительные данные в базе данных. Вам нужно только проверить подпись и выполнить поиск по идентификатору пользователя. Недостатком является то, что вы должны убедиться, что код подписи является безопасным (HMAC-SHA-1 с более длинным секретным ключом должен это делать).
0 голосов
/ 03 октября 2009

Вам не нужно хранить пароль пользователя в куки. Вы можете сгенерировать длинную случайную строку (похожую на sessionid), которую вы храните в базе данных и в файле cookie. Вы можете изменять эту строку каждый раз, когда заканчивается сеанс и пользователь возвращается. Когда пользователь заходит на сайт, вы можете проверить значение файла cookie в базе данных и посмотреть, кто этот пользователь.

0 голосов
/ 03 октября 2009

В хранилище базы данных только хэш-код пароля, а cookie должен содержать идентификатор сеанса, часто называемый SID. В другой таблице храните все SIDuserID) и все. Но не забывайте, что PHP имеет встроенный очень простой и полезный API сессии, используйте его лучше:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...