[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Самая базопасная схема
LRCenter

Вариант 1:
session_start();
if($_SESSION['login']==$login && $_SESSION['pass']==$pass){

#Код админки

}
else{exit("Вы не авторизованы.");}



Вариант 2:
session_start();
if($_SESSION['login']!=$login && $_SESSION['pass']!=$pass){

exit("Вы не авторизованы.");

}

#Код админки



Равнозначны-ли в плане безопасности оба варианта?




Спустя 5 минут, 56 секунд (8.03.2011 - 21:17) Trianon написал(а):
Цитата
Вариант 2:

session_start();
if($_SESSION['login']!=$login && $_SESSION['pass']!=$pass){

exit("Вы не авторизованы.");


Попробуйте запустить скрипт N 2 так, чтобы в сессии оказался правильный логин и неправильный пароль.
Или наоборот - правильный пароль и ошибочный логин.
Что будет?



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

Спустя 6 минут, 14 секунд (8.03.2011 - 21:24) Dron19 написал(а):
Trianon , да кстати! Войдет в админку!

Спустя 41 минута, 39 секунд (8.03.2011 - 22:05) alex12060 написал(а):
Почему войдет? оО
Ведь && - логическое AND
И если одно из условий неверно, то вернет false

Спустя 31 минута, 28 секунд (8.03.2011 - 22:37) Evilsoul написал(а):
alex12060
ага, вот и я не понял почему войдет...

LRCenter
вообще как по мне, лучше проверять по отдельности и еще строгим равенством ===

Спустя 7 часов, 37 минут, 58 секунд (9.03.2011 - 06:15) LRCenter написал(а):
Не, не, понятно что пароль не хранится в открытом виде, и вообще не хранится в сессии, это я так условно. Интересует именно надежность логики второго варианта, т.е. можно-ли использовать авторизацию как отдельный блок кода, не вписывая в него код админки? Это дает большую гибкость, например можно приинклудить один код авторизации к куче скриптов админки разом.

Т.е. достаточно ли exit; и само условие чтоб не допустить выполнения кода после, в случае непрохождения авторизации?


session_start();
if($_SESSION['login']===$login && $_SESSION['userid']===$userid){

#Код админки

}
else{exit("Вы не авторизованы.");}



Вариант 2:
session_start();
if($_SESSION['login']===$login && $_SESSION['userid']===$userid){

exit("Вы не авторизованы.");

}

#Код админки


Evilsoul
Понял, насчет "===", спасибо!

Trianon
Dron19
Почему войдет, не понял?

Спустя 3 часа, 14 минут, 29 секунд (9.03.2011 - 09:29) linker написал(а):
LRCenter
А ты сам подумай
$_SESSION['login']!=$login && $_SESSION['pass']!=$pass
условие выполнится если $_SESSION['login']!=$login И $_SESSION['pass']!=$pass, т.е. одновременное неравенство двух условий. Таким образом, если хотя бы логин будет совпадать, то условие не выполнится и хацкер войдет в твою закрытую часть.

Спустя 18 минут, 34 секунды (9.03.2011 - 09:48) alex12060 написал(а):
точно)

Спустя 10 минут, 20 секунд (9.03.2011 - 09:58) LRCenter написал(а):
Че-то я запутался. Второй вариант кажется мне все же удобнее.

session_start();
if($_SESSION['login']!=$login){exit("Вы не авторизованы.");}
else{
if($_SESSION['pass']!=$pass){exit("Вы не авторизованы.");}
}


#Код админки



linker
Так все ок?

Спустя 33 минуты, 13 секунд (9.03.2011 - 10:31) twin написал(а):
Зачем пароль в сессию, ты можешь как то объяснить?

Спустя 16 минут, 29 секунд (9.03.2011 - 10:48) LRCenter написал(а):
Да, не пароль, а контрольную переменную! Кстати а что вообще записывать в сессию для авторизации?


Вот допустим, авторизовался юзверь, проверли логин, пароль, все ок - открываем сессию, записываем туда его логин, но этого явно недостаточно для надежности, чего еще "солёный" пароль например, в качестве котнтрольной переменной подойдет??

Спустя 34 минуты, 49 секунд (9.03.2011 - 11:22) LRCenter написал(а):
linker
Сменить "&&" на "or" и все дела.

Спустя 3 часа, 51 минута, 12 секунд (9.03.2011 - 15:14) Trianon написал(а):
Цитата (LRCenter @ 9.03.2011 - 10:48)
Да, не пароль, а контрольную переменную! Кстати а что вообще записывать в сессию для авторизации?


Вот допустим, авторизовался юзверь, проверли логин, пароль, все ок - открываем сессию, записываем туда его логин, но этого явно недостаточно для надежности, чего еще "солёный" пароль например, в качестве котнтрольной переменной подойдет??

для какой надежности недостаточно?
Туда и логин-то писать необязательно.
Достаточно записать id в таблице пользователей.

Что Вам даст логин с паролем, помещенный в сессию?

Что он даст злоумышленнику, я могу сказать.
А что он даст для пользы дела?

Спустя 10 минут, 31 секунда (9.03.2011 - 15:24) linker написал(а):
Лично я для каждой сессии генерю уникальный хэш.

Спустя 21 минута, 36 секунд (9.03.2011 - 15:46) Michael написал(а):
Цитата (linker @ 9.03.2011 - 14:24)
Лично я для каждой сессии генерю уникальный хэш.

с привязкой к ip-шнику?

Спустя 45 минут, 57 секунд (9.03.2011 - 16:32) LRCenter написал(а):
Michael
Лучше, да + имя и версию браузера можно. А id обязательно должен менятся от сессии к сессии? может лучше использовать хеш логина с динамически ротируемой солью?

Спустя 52 минуты, 19 секунд (9.03.2011 - 17:24) Michael написал(а):
Цитата (LRCenter)
А id обязательно должен менятся от сессии к сессии?

Ты о чем? Человек один раз залогинился и в сессии хранится id этого пользователя.

Спустя 5 минут, 18 секунд (9.03.2011 - 17:29) LRCenter написал(а):
Просто linker говорит, что генерирует уникальный id для каждой сессии, и в базе его перезаписывать, чтоб в сессии вообще не хранилось ничего постоянного, вот я и думаю настолько это целесообразно?

Спустя 3 минуты, 53 секунды (9.03.2011 - 17:33) Michael написал(а):
Цитата (LRCenter @ 9.03.2011 - 16:29)
Просто linker говорит, что генерирует уникальный id для каждой сессии

он сказал, что генерирует уникальный хеш.

Спустя 14 минут, 51 секунда (9.03.2011 - 17:48) linker написал(а):
Я для каждой новой сессии генерирую уникальный хэш. Данному хэшу противопоставляется идентификатор авторизованного пользователя, плюс время последнего обновления (лимит жизни сессии в таблице равен значению из session.gc_maxlifetime), все это дело хранится в таблице. Генерируемый хэш уникален и не завязан ни на логин, ни на пароль, ни на какие иные статические данные.


_____________
Меньше кода - меньше багов ©
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.