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

Статус
В этой теме нельзя размещать новые ответы.

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("Неверно введены логин/пароль!");
	}
}
Если нет то что тут можно изменить и добавить, а может чего и лишнего убрать. Подскажите пожалуйста
 
Пароли в куках никто не хранит!
 
Acidrayne, пароли в куках(захешированные) хранят множество CMS, в т.ч. koobi, php-fusion, php-nuke, dle(раньше, по крайней мере).

LKamikadze, функция parser что делает?
 
vkontakte хранит пароли в куках(мд5 )
и емейл не шифрованный

Логин и пароль хранить в куках это очень не безопасно, лучше хранить какой нибудь ключ генерируемый после каждого сеанса работы с поьзователем, т.е. пользователь залогинился сгенеририть ключ, пользователь пришел через большой промежуток времени проверить ключ на актуальность и выдать новый, в этом случае:
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 минут после последнего соеденения по кукам спрашивать пароль заново, в таком случае использовать украденные куки будет очень сложно.
 
LKamikadze

а данный скрипт будет стоек к sql инекциям?
 
да. к sql инъекциям скрипт стоек. за это отвечает класс parser.

И все-же мне хотелось-бы знать про куки. Как можно зашифровать куки. держать пароль в закрытом виде. как мне и что изменить?
 
Вот пост вы фильтруете...не знаю что у вас там в функции parser... (не видя этой функции ничего сказать про правильность фильтрации данных невозможно...)
PHP:
$uname = parser($_POST['uname']);
$pass = parser($_POST['pass']);
а информацию из кук нет...
 
По куках можно стырить пароьль.Хотя я читал книгу про эти штучки,то там было написано что по куках нельзя стырить что это все развод.И я так думаю те кто куки читить то не стыришь.:)
 
да. к sql инъекциям скрипт стоек. за это отвечает класс parser.

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

Можно хранить не куку юзер/пароль, а ID сессии. Ну естественно сессии тоже надо сохранять где-то на сервере. Файлы, БД, мемкеш что изволите...
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху