|
|
|
| Заранее извиняйте за возможное повторение темы, но по ключевым словам в поиске выводится около 6000 сообщений, пролистать их все выше моих сил :)
Сабж в следующем:
При регистрации на странице в базу данных заносятся логин пользователя и пароль в зашифрованном методом md5 виде. При авторизации пользователя сверяются хеши паролей и сама авторизация проходит, как говорится, на ура.
Но каким образом можно данный пароль восстановить, если пользователь его забыл (стандартная схемы "забыли пароль", используемая на многих сайтах)?
Ума не приложу. | |
|
|
|
|
|
|
|
для: aexb
(05.03.2006 в 14:42)
| | назначить ему новый. Старый-то он все равно забыл:) | |
|
|
|
|
|
|
|
для: Loki
(05.03.2006 в 14:54)
| | >назначить ему новый. Старый-то он все равно забыл:)
Не-не-не! Дело не в том, что забыл! Вопрос в том, каким образом можно изначально сохранять пароли в базу в ЗАКРЫТОМ виде, но при этом чтоб можно было их восстанавливать.
Просто везде и всюду для хранения паролей рекомендуют MD5 именно из-за его необратимости. Все остальное можно, погеморроившись слегка, расшифровать.
Поэтому ежели какой кулхацкер базу вскроет, то снять оттуда такие пароли ему не составит никакого труда :(
И, кроме того, на этом форуме пароли тоже можно восстанавливать :)
Видимо, лучше хранить пассворды в поддающемся расшифровке хешу. | |
|
|
|
|
|
|
|
для: aexb
(05.03.2006 в 15:03)
| | ну так и везде при напоминании пароля , пользователю создаеться новый и отсылаеться ему , а пользователь потом заходить в систему и меняет пароль и опять же шифруеться в мд5 | |
|
|
|
|
|
|
|
для: aexb
(05.03.2006 в 15:03)
| | я для этого использую симметричное шифрование... mcrypt
а если хацкер вскроет базу, то он наверное сможет и новый пароль поставить
можно ключик для шифрования сделать подлиннее и посложнее, так что хакер (особенно если он "кул хацкер" :) запарится их расшифрововать... | |
|
|
|
|
|
|
|
для: aexb
(05.03.2006 в 15:03)
| | >Не-не-не! Дело не в том, что забыл! Вопрос в том, каким
>образом можно изначально сохранять пароли в базу в ЗАКРЫТОМ
>виде, но при этом чтоб можно было их восстанавливать.
Если их можно будет восстанавливать, их БУДУТ восстанавливать. Причем отнюдь не владельцы паролей.
>Просто везде и всюду для хранения паролей рекомендуют MD5
>именно из-за его необратимости. Все остальное можно,
>погеморроившись слегка, расшифровать.
>Поэтому ежели какой кулхацкер базу вскроет, то снять оттуда
>такие пароли ему не составит никакого труда :(
Вот именно.
>И, кроме того, на этом форуме пароли тоже можно
>восстанавливать :)
Если этот форум довольно грязно обходится с паролями, это еще не повод брать с него в этом пример.
>Видимо, лучше хранить пассворды в поддающемся расшифровке
>хешу.
Вот как раз так пароли лучше не хранить.
Не говоря уже о том, что если вид хеш - то вид хранения необратим. А если обратим - то уже не хеш. | |
|
|
|
|
|
|
|
для: aexb
(05.03.2006 в 14:42)
| | Я делал такую систему.
1) ользователь вводил при регистрации своё мыло
2) В форму вводилось мыло
3) На мыло посылалось новый пароль, он же заносился в БД.
4) Пользователь потом, если хотел, менял пароль | |
|
|
|
|
|
|
|
для: aexb
(05.03.2006 в 14:42)
| |
<?
if(!defined("F_MOD"))
{
echo "<meta http-equiv='refresh' content='0; url=index.php'>";
exit;
}
if($action=="forget")
{
$query_forget=MYSQL_QUERY("SELECT login, mail FROM users WHERE mail='$mail' and login='$login'");
$num=mysql_num_rows($query_forget);
if($num!=0)
{
list($login_user, $mail_user)=mysql_fetch_row($query_forget);
if($login_user==$login)
{
$input=array( "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","0","1","2","3","4","5","6","7","8","9");
$rand_keys=array_rand($input,10);
$pass_user="";
for($i=0;$i<10;$i++)
{
$pass_user.=$input[$rand_keys[$i]];
}
$subject="Восстановление пароля";
$content="Восстановление пароля<br>";
$content.="Ваш логин: $login <br>";
$content.="Ваш пароль: $pass_user<br><br>";
mail($mail_user,$subject,$content);
$pass_user=md5($pass_user);
$query_upd="update users set pass='$pass_user' where login='$login'";
if(mysql_query($query_upd))
{
echo"На указанный e-mail отправлено письмо с вашим новым паролем";
}
}
else
{
echo"Произошла ошибка! Нет соответствий!";
}
}
else
{
echo"Произошла ошибка! Нет соответствий!";
}
}
else
{?>
<form action="forget.php" method="post">
<table cellpadding=3 cellspacing=0 width=100% border=0>
<tr>
<td valign=top><span class=head>Восстановление пароля</span></td>
</tr>
<tr>
<td valign=top>
Для получения забытого пароля введите Ваш e-mail и логин, указанные при регистрации.
На E-Mail будет выслано письмо, содержащее новый пароль!</td>
</tr>
<tr>
<td valign=top>
<input type="hidden" name="action" value="forget">
Ваш e-mail: <br>
<input type="text" name="mail" size="20"></td>
</tr>
<tr>
<td valign=top>
Ваш логин: <br>
<input type="text" name="login" size="20"></td>
</tr>
<tr>
<td valign=top>
<input type="submit" value="Принять"></td>
</tr>
</table>
</form><?
}
?>
|
нормльный код, пользуюсь сам.. :) | |
|
|
|
|
|
|
|
для: aexb
(05.03.2006 в 14:42)
| | Можно поступить брутально )))
Выдернуть из БД мд5 и организовать огромный цикл.
А в цикле генерировать строки и проверять их мд5 с мд5 из БД!
Парвда это очень долго )))
Да и врядли получится )) | |
|
|
|
|
|
|
|
для: Kusuk
(06.03.2006 в 09:44)
| | а потом скрипт возьмёт и завсинет, перестанет работать через 30 секунд, потом поставим set_time_limit на миллион и повешаем весь сервак ;) | |
|
|
|
|
|
|
|
для: aexb
(05.03.2006 в 14:42)
| | если еще надо
http://nsd.ru/soft.php?group=hacksoft&razdel=passwords
там скачаешь MD5inside 1.0
ну а дальше розберешся | |
|
|
|
|