куки при авторизации

robinner

Новичок
куки при авторизации

Всем привет!Возник такой вопрос, при авторизации у меня что-то происходит не правильно...

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

вот код

<?php
session_start();
include("construct/db.php");
include("construct/data.php");
?>
<div id="header"><a href="">Обратная связь</a>|<a href="">Ссылка номер 2</a>|<a href="">Третья</a>
<div id="enter">
<form method="post">
<?php
$query = "SELECT * FROM `users` WHERE `login` = '".mysql_real_escape_string($name)."' AND `password` = '".md5(md5(strtolower($password)))."' LIMIT 1";
$sql = mysql_fetch_array(mysql_query($query));
if(isset($no))
{
unset($_COOKIE['user']);
mysql_query('UPDATE `users` SET `status` = "0" WHERE `login` = "'.$_COOKIE['login'].'"');
}
if(mysql_num_rows(mysql_query($query)) == 1)
{
mysql_query('UPDATE `users` SET `status` = "1" WHERE `login` = "'.$name.'"');
setcookie('user', '$name $password $query[4]', time()+1800);
}
if(!isset($_COOKIE['user']))
{
?>
<span><p>login:</p><input name="name" type="text" value="" class="enter_input_long" /></span>
<span><p>Password:</p><input name="password" type="password" value="" class="enter_input" /><input type="submit" value="Вход" class="submit" /></span>
<input name="memory" type="checkbox" value="on" class="enter_check" /><b>Запомнить</b><a href="registration.php">Регистрация</a><a href="">Забыли?</a>
<?php
}
else
{
?>
<span><p>профиль</p><input name="no" type="submit" value="Выйти" class="submit" /></span>
<?php
}

?>
</form>
</div>
</div>
 

Вурдалак

Продвинутый новичок
Re: куки при авторизации

Автор оригинала: robinner
PHP:
md5(md5(strtolower($password)))
— strtolower() для того, чтобы легче было подобрать пароль?

Откуда взялись $no, $name, $password?

Автор оригинала: robinner
PHP:
setcookie('user', '$name $password $query[4]', time()+1800)
— несколько cookies создать не дано? И что такое $query[4]? Пятый символ из текста запроса?

http://php.net/manual/en/security.globals.php
http://phpfaq.ru/slashes

-~{}~ 10.02.10 12:32:

О, так ты ж ещё и в апострофы запихал эти переменные :D
 

robinner

Новичок
Ну strtolower это просто чтобы не было гемора с капсом
$query[4] - это ,да просто я там немного не дописал
создал несколько куков
но суть от этого не меняется, куки не уничтожаются

<?php
session_start();
include("construct/db.php");
include("construct/data.php");
?>
<div id="header"><a href="">Обратная связь</a>|<a href="">Ссылка номер 2</a>|<a href="">Третья</a>
<div id="enter">
<form method="post">
<?php
$query = "SELECT * FROM `users` WHERE `login` = '".mysql_real_escape_string($name)."' AND `password` = '".md5(md5(strtolower($password)))."' LIMIT 1";
$sql = mysql_fetch_array(mysql_query($query));
if(isset($no))
{
mysql_query('UPDATE `users` SET `status` = "0" WHERE `login` = "'.$_COOKIE['user'].'"');
unset($_COOKIE['user']);
unset($_COOKIE['password']);
}
if(!empty($name) && !empty($password))
{
if(mysql_num_rows(mysql_query($query)) == '1')
{
mysql_query('UPDATE `users` SET `status` = "1" WHERE `login` = "'.$name.'"');
setcookie('user', $name, time()+1800);
setcookie('password', $sql[2], time()+1800);
}
}
if(!isset($_COOKIE['user']))
{
?>
<span><p>login:</p><input name="name" type="text" value="" class="enter_input_long" /></span>
<span><p>Password:</p><input name="password" type="password" value="" class="enter_input" /><input type="submit" value="Вход" class="submit" /></span>
<input name="memory" type="checkbox" value="on" class="enter_check" /><b>Запомнить</b><a href="registration.php">Регистрация</a><a href="">Забыли?</a>
<?php
}
else
{
?>
<span><p>профиль</p><input name="no" type="submit" value="Выйти" class="submit" /></span>
<?php
}
echo "<span><p>".$_COOKIE['user']."</p></span>";
?>
</form>
</div>
</div>
 

dimagolov

Новичок
md5(md5()) снижает, а не повышает устойчивось. в отличии от добавлении соли, которой у тебя нету.

поищи по форуму учебный скрипт авторизации от *****а.
 

Вурдалак

Продвинутый новичок
Автор оригинала: robinner
куки не уничтожаются
— где ты читал, что cookies уничтожаются unset'ом?

-~{}~ 10.02.10 18:41:

Автор оригинала: dimagolov
md5(md5()) снижает, а не повышает устойчивось
— почему?

-~{}~ 10.02.10 18:42:

Автор оригинала: robinner
Ну strtolower это просто чтобы не было гемора с капсом
:rolleyes:
 

dimagolov

Новичок
потому что увеличивают вероятность коллизий. погугли на тему использования коллизий хешей для подбора паролей.

просто из банальной логики. множество любых строк md5 преобразовывает в множество 128-битных чисел или их 32-символьных представлений. теоретически таких значений может быть 2^128. на втором шаге мы уже строго определенный набор строк (32 символа 0-9a-f) пропускаем через md5 и получаем много более узкий набор возможных хешей. то есть вероятность того, что две изначально разные строки дадут одинаковый хеш повышается.
 

dimagolov

Новичок
robinner, почитай: http://phpfaq.ru/sessions

-~{}~ 10.02.10 12:37:

Вурдалак, вот еще в чем глупость md5(md5()). если строки одинаковые или в следствии коллизии дают одинаковый хеш, то повторный md5 ничего с этим поделать не может, так как принимает одну и ту же строку и тоже даст идентичный хеш.
 

Вурдалак

Продвинутый новичок
dimagolov
На самом деле на практике, IMHO, md5(md5()) будет лучше md5(), потому что:

1) Труднее найти по хешу нужную строку, используя базы хешей (я не видел таких).

2) Подобрать хеш нереально вследствие огромного числа возможных строк (как ты сам сказал это 2^128 значений). Хоть мы точно знаем что это за множество, но сравни: количество значений строки из 72-символьного алфавита (26 букв лат. алфавита в обоих регистрах + цифры + ещё какие-то 10 символов) длиной 10 символов это «всего» 3743906242624487424 значений, а 2^128 — 340282366920938463463374607431768211456 значений.

Но так-то, конечно, надо использовать salt.

Правда могут быть какие-то тонкие математические нюансы, о которых я пока не знаю.
 
Сверху