Насколько безопасна написанная мной авторизация?

IPConfig

Новичок
Насколько безопасна написанная мной авторизация?

Насколько безопасна написанная мной авторизация?

Дамп:
PHP:
CREATE TABLE `users` (
  `id` int(10) NOT NULL auto_increment,
  `login` varchar(100) default NULL,
  `passwd` varchar(100) default NULL,
  `email` varchar(200) default NULL,
  `su` int(1) default NULL,
  `hash` varchar(50) default NULL,
  `ip` varchar(10) default NULL,
  `last_login` varchar(20) NOT NULL,
  `register` varchar(20) NOT NULL,
  `alter_dop` text NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `login` (`login`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COMMENT='Таблица пользователей сайта';
Система авторизации:

PHP:
        if(!isset($_POST['login']))die("Не введен Login");
        if(!isset($_POST['password']))die("Не введен Password");
        if(isset($_POST['remember']))$remember=1; else $remember=0;
        unset($_COOKIE['uid']);
        unset($_COOKIE['hash']);
        unset($hash);
        unset($uid);
        $ip=mysql_real_escape_string(substr($_SERVER['REMOTE_ADDR'], 0, 10));
        $login=mysql_real_escape_string(strtolower($_POST['login']));
        $pass=mysql_real_escape_string(md5($_POST['password']));
        $last=time();
        $resource_auth=mysql_query("select * from users where `login`='$login' and `passwd`='$pass' limit 1");
        if(!$auth=mysql_fetch_array($resource_auth)){
        	$forma="Ошибка: логин или пароль введены неверно - $login(".$_POST['login'].") - $pass";
        } else {
        	$hash=md5($auth['login'].$auth['passwd']."-".$auth['register'].$auth['last_login']);
        	$uid=intval($auth['id']);
        	$reg_auth="UPDATE `users` SET `hash` = '$hash', `ip` = '$ip', `last_login` = '$last' WHERE `id` ='$uid' LIMIT 1";
        	if(mysql_query($reg_auth,$con)){
         		if($remember==1){
         			setcookie("uid", $uid,time()+3600*24*365,"/",$cook_dom);
         			setcookie("hash", $hash,time()+3600*24*365,"/",$cook_dom);
         		} else {
         			setcookie("uid", $uid,time()+3600,"/",$cook_dom);
         			setcookie("hash", $hash,time()+3600,"/",$cook_dom);
         		}
         		$forma="";
         		header("Location: $murl");
        	} else {
        		$forma="Ошибка: Системная ошибка авторизации - ".mysql_error();
        	}
        }
Система проверки(вызывается при открытии любой страницы):
PHP:
//Обрабатываем пользователя
unset($user); //Удаляем всю старую информацию о пользователе
if(!isset($_COOKIE['uid']))$uid=0; else $uid=intval($_COOKIE['uid']);
if(($uid!=0) and isset($_COOKIE['hash'])){
	$hashd=mysql_real_escape_string($_COOKIE['hash']);
	$ip=mysql_real_escape_string(substr($_SERVER['REMOTE_ADDR'], 0, 10));
	$resource_login=mysql_query("select * from users where `id`='$uid' and `hash`='$hashd' and `ip`='$ip' limit 1");
	if(!$user=mysql_fetch_array($resource_login)){
		unset($_COOKIE['uid']);
		unset($_COOKIE['hash']);
		//header("Location: $murl");
	}
}

if(!isset($user)){
$loginform="<ul><li>
<b>Авторизация:</b><br><form name=login method=post action=$murl/auth><table border=1 width=70%>
<tr><td>Login: </td><td><input type=text size=15 name=login></td></tr>
<tr><td>Password: </td><td><input type=text size=15 name=password></td></tr>
<tr><td colspan=2><center><input type=submit name=ok value=ok></center>
<br>
<a href=$murl/reg>регистрация</a>
</td></tr></table></form>
</li></ul>";
} else {
	$loginform="<ul><li>Привет, <b>".$user['login']."</b></li>";
	$loginform.="<li><a href=$murl/all.php?a=logout>Выход</a></li>";
	$loginform.="</ul>";
}

Прежде чем вводить её, хотел бы узнать мнение профессионалов...
Соответственно если массив $user существует, значит пользователь авторизирован.
Поле su в базе означает уровень прав пользователя...
 

Фанат

oncle terrible
Команда форума
переделай под register_globals=off, чтобы духу всех этих unset($user) не было
 

IPConfig

Новичок
Оно и так под register_globals=off...
unset($user); стоит на всякий случай, если у сервера будет стоять register_globals=on

Спасибо=)
 

dr-sm

Новичок
хешь пароля лучше не класть в куки, лучше класть хеш от хеша пароля )). ну и про соль почитай.
http://phpclub.ru/talk/showthread.php?s=&threadid=110683
 

IPConfig

Новичок
А тут хэша пароля нет..

Тут хэш:
PHP:
$hash=md5($auth['login'].$auth['passwd']."-".$auth['register'].$auth['last_login']);

Тоесть, $auth['passwd'] уже в md5....+ добавляется всякая фигня....с last_login(чтоб хэш всегда был разный)...
 
Сверху