2014-01-02 4 views
1

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

<?php 
    password_verify($_POST['password'], $dbpassword); 
?> 

проблема заключается в проверке с использованием файлов cookie. В моем файле конфигурации у меня такая же проверка, как и в форме ведения журнала, за исключением того, что данные поступают из файлов cookie, и он возвращает false или true. Но пароль в cookie уже зашифрован, поэтому password_verify() не будет работать. И что же мне делать?

+14

не храните пароли в печенье. Период. –

+0

@ JohnConde, так как я могу проверить, что пользователь вошел? –

+0

Существует нет возможности безопасно хранить пароль в файле cookie; вам даже не нужно хранить пароль в сеансе. –

ответ

1

Невозможно безопасно хранить пароль в файле cookie. Альтернативой (хотя все еще не рекомендуется) является ее сохранение в $ _SESSION вместо этого - все еще несколько небезопасно в том, что сеанс может быть захвачен или что вредоносный код может привести к его отправке по сети. В любом случае вы не должны сравнивать фактические пароли, вам нужно использовать хеши (md5 или что-то более безопасное) с солью.

В основном:

$db_password=get_password_hash_from_db(); /*you should store the md5(salt+password) in the db, not password*/ 
$salt='some_secret_constant'; 
if ($_POST['password']) $_SESSION['password']=md5($salt+$_POST['password']); 
if ($_SESSION['password']!=$db_password) die('Wrong Password'); 
+0

Вам не следует хранить пароли в сеансе, им там не место. 'md5 + salt' ** недостаточно сильный **. PHP имеет хорошие функции хэширования пароля, для получения дополнительной информации см. Этот учебник: http://php.net/manual/en/function.password-hash.php – Halcyon

+0

Это описано в моем ответе. Я ответил, как делать то, что спрашивает OP, и предупредил против этого. Спасибо за ссылку на альтернативы md5. Обратите внимание, что в моем примере пароль не сохраняется в сеансе. –

2

Сохранение паролей в печенье серьезный облом! Не делай этого!

Я думаю, что вы спрашиваете: «Как я могу проверить, зарегистрирован ли пользователь?»

Предлагаю использовать СЕССИИ, в отличие от COOKIES.

Когда пользователь посещает ваш сайт, COOKIE с идентификатором сеанса создается автоматически и передается на каждую доступную страницу.

Сессии хранятся на сервере.

Когда вы выполняете аутентификацию пользователя (проверьте, что имя пользователя и пароль существуют в базе данных и соответствуют предоставленным данным), вы можете установить некоторые переменные сеанса (например, $_SESSION['loggedin'] = true;), а затем, когда вы хотите проверить, вошел ли пользователь в систему, вы посмотрите на эту переменную сеанса (например

//Check if user is logged in. 
if(array_key_exists('loggedin',$_SESSION) && $_SESSION['loggedin'] === true) { 
    // do something here 
} 

Это только базовая реализация, и я настоятельно рекомендую прочитать некоторые онлайновые ресурсы в отношении PHP безопасности.

+0

Но сеанс не cookie ... Будет ли безопасно, если я создам файл cookie с хэшированным именем пользователя, ip и т. Д. И просто проверяю его каждый раз? –

+0

Нет, это не будет безопасно. Если у пользователя есть вредоносный код на своем компьютере, который считывает информацию о файлах cookie, даже если он хэширован, у злоумышленника есть возможность определить, что представляют собой данные пользователей. По этой причине ни один веб-сайт не должен использовать файлы cookie для хранения конфиденциальных данных. –

+0

Итак, как я могу создать автоматический логин, например Google и Facebook? –

Смежные вопросы