Авторизация на сайте

Тема в разделе "PHP", создана пользователем LKamikadze, 10 май 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. LKamikadze

    LKamikadze Создатель

    Регистр.:
    9 янв 2009
    Сообщения:
    12
    Симпатии:
    0
    Посмотрите пожалуйста, является ли мой код безопасным в авторизации пользователей?
    Код:
    function login(){
    	global $db, $tpl, $pr, $ucheck;
    	$cookie = new Cookie("user_cookie");
    	session_start();
    	if(isset($_SESSION['attempt_of_entry']) && intval($_SESSION['attempt_of_entry']) > 6){
    		err("Большое количество неверных вхождений!");
    	}
    	$uname = parser($_POST['uname']);
    	$pass = parser($_POST['pass']);
    	if($uname == "" or $pass == ""){
    		err("Вы оставили пустое поле или поля!");
    	}
    	$pass = md5(md5($pass));
    	$ip = $ucheck->ip();
    	list($email) = $db->upquery("SELECT email FROM users where uname = '$uname' and pass = '$pass'"); //проверка на правильность + извлечение email
    	if($email){
    		$cookie->addset("username", $uname);
    		$cookie->addset("userpass", $pass);
    		$cookie->addset("usermail", $email);
    		$cookie->set();
            header("Location: index.php?mod=users");
    	}else{
    		if(!isset($_SESSION['attempt_of_entry'])){
    			$_SESSION['attempt_of_entry'] = 1;
    		}else{
    		    $_SESSION['attempt_of_entry']++;
    		}
    		err("Неверно введены логин/пароль!");
    	}
    }
    
    Если нет то что тут можно изменить и добавить, а может чего и лишнего убрать. Подскажите пожалуйста
     
  2. Acidrayne

    Acidrayne

    Регистр.:
    30 сен 2007
    Сообщения:
    296
    Симпатии:
    20
    Пароли в куках никто не хранит!
     
  3. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    311
    Acidrayne, пароли в куках(захешированные) хранят множество CMS, в т.ч. koobi, php-fusion, php-nuke, dle(раньше, по крайней мере).

    LKamikadze, функция parser что делает?
     
  4. microsofd

    microsofd Создатель

    Регистр.:
    25 фев 2008
    Сообщения:
    22
    Симпатии:
    1
    vkontakte хранит пароли в куках(мд5 )
    и емейл не шифрованный
     
  5. Acidrayne

    Acidrayne

    Регистр.:
    30 сен 2007
    Сообщения:
    296
    Симпатии:
    20
    Логин и пароль хранить в куках это очень не безопасно, лучше хранить какой нибудь ключ генерируемый после каждого сеанса работы с поьзователем, т.е. пользователь залогинился сгенеририть ключ, пользователь пришел через большой промежуток времени проверить ключ на актуальность и выдать новый, в этом случае:
    1) даже если куку украдут после первого логирования правильного пользователя она перестанет действовать
    2) если в куки будет user = vasja, password = pass это намного понятнее хацкеру, чем key23 = hfjge3734897gkghs
    3) если пользователь под одним паролем заходит везде с кражей вашей куки он теоретически может потерять все в инете от почты и icq до кучи $

    Ну и сессии и куки можно использовать только для кратковременной авторизации, и сессию и куки можно настроить так чтобы они сохранялись только в памяти и как только браузер закроется удалялись. По сути для одного сеанса никакой разницы между сессией и куками нет, просто сессия более удобна для программирования (это просто куки которые автоматом передаются между страницами), для одного сеанса связи кроме куков можно ещё ip адрес или user-agent проверять, для постоянного входа лучше каждый раз спрашивать имя и пароль.
    Вообще я знаю 4 метода кратковременной авторизации
    1) куки
    2) сессии
    3) htacсess (сложно добавлять новых пользователей)
    4) отправкой кода 401 браузера (пользователю браузер покажет окно пароля, при каждом следующем обращении к любой странице сайта до тех пор пока не будет закрыт браузер пароль и пользователь будут в переменных $PHP_AUTH_PW и $PHP_AUTH_USER, это берет на себя браузер)

    P.S. Наверно можно ещё комбинировать различные методы типа проверки User-Agent, IP, куков и кода 401, но для сверх важной информации лучше использовать https, ну и можно вести логи соединений с помощью сессий и кук и например через 30 минут после последнего соеденения по кукам спрашивать пароль заново, в таком случае использовать украденные куки будет очень сложно.
     
  6. microsofd

    microsofd Создатель

    Регистр.:
    25 фев 2008
    Сообщения:
    22
    Симпатии:
    1
    LKamikadze

    а данный скрипт будет стоек к sql инекциям?
     
  7. LKamikadze

    LKamikadze Создатель

    Регистр.:
    9 янв 2009
    Сообщения:
    12
    Симпатии:
    0
    да. к sql инъекциям скрипт стоек. за это отвечает класс parser.

    И все-же мне хотелось-бы знать про куки. Как можно зашифровать куки. держать пароль в закрытом виде. как мне и что изменить?
     
  8. serjinio

    serjinio

    Регистр.:
    10 май 2007
    Сообщения:
    439
    Симпатии:
    49
    Вот пост вы фильтруете...не знаю что у вас там в функции parser... (не видя этой функции ничего сказать про правильность фильтрации данных невозможно...)
    PHP:
    $uname parser($_POST['uname']);
    $pass parser($_POST['pass']);
    а информацию из кук нет...
     
  9. sasha14486

    sasha14486 Создатель

    Регистр.:
    27 июл 2008
    Сообщения:
    24
    Симпатии:
    0
    По куках можно стырить пароьль.Хотя я читал книгу про эти штучки,то там было написано что по куках нельзя стырить что это все развод.И я так думаю те кто куки читить то не стыришь.:)
     
  10. kr0lik1

    kr0lik1 Создатель

    Регистр.:
    13 июн 2007
    Сообщения:
    28
    Симпатии:
    3
    Можно хранить не куку юзер/пароль, а ID сессии. Ну естественно сессии тоже надо сохранять где-то на сервере. Файлы, БД, мемкеш что изволите...
     
Статус темы:
Закрыта.