оцените алгоритм

Apocalepse

Новичок
оцените алгоритм

Здравствуйте. Подскажите пожалуйста, безопасен ли такой алгоритм авторизации:
логины и пароли хранятся в двух файлах которые лежат в папке с CHMOD 770.
При попытке авторизации скрипт проверяет введенные данные и вслучае наличия
таких логина и пароля в файлах, открывает сессию (session_start()) и создает переменную
$_SESsioN['authorize']="done".
В последствии на зищищенных страницах проверяется if ($_SESSION['authorize']=="done")
и в случае если $_SESsioN['authorize'] равна done, то выводиться панель администрирования.
----
Боюсь что я чего нибудь не учел...
 

paganelp

Guest
Почитай статью http://detail.phpclub.ru/article/sessions
Там достаточно подробно расписано и ссылки есть в конце.
 

Apocalepse

Новичок
Да у меня целая книга есть. И там в примере авторизация построена так... Ну все равно спасибо.
 

Wicked

Новичок
1) если у тебя есть 2 независимых сайта (http://host/site1, http://host/site2), которые используют такую систему авторизации, то юзер, залогинившийся на одном из них автоматически получает доступ ко второму, даже если во втором сайте нету такого юзера.

2) главный администратор не сможет заблокировать уже залогиненных юзеров (путем удаления записей об этих юзерах из файлов) до тех пор, пока у тех не протухнет сессия.
 

Apocalepse

Новичок
А если для каждого нового сайта, делать разное значение переменной $_SESSION['authorize'], или имя самой переменной?
 

TsarAlex

Новичок
1) если у тебя есть 2 независимых сайта (http://host/site1, http://host/site2), которые используют такую систему авторизации, то юзер, залогинившийся на одном из них автоматически получает доступ ко второму, даже если во втором сайте нету такого юзера.
Вот это да. То есть если чел зашёл в свой аккаунт в веб-почте, а потом зашёл на мой сайт, то я могу узнать все перемнные сессии с веб-почтой?
Хоршо бы.

2) главный администратор не сможет заблокировать уже залогиненных юзеров (путем удаления записей об этих юзерах из файлов) до тех пор, пока у тех не протухнет сессия.
Наверное имеет смысл в начале выполнения каждого скрипта админ. панели ставить проверку - считать сколько времени прошло между двумя вызовами(текущим и предыдущим). Если больше некоторого допустимого значения - прекратить сессию и попросить пользователя залогинится по новой (подтвердит что это всё ещё он), если да то вернуться туда, откуда его попросили пере-войти в систему.
Вроде обычно так и делают.
 

Фанат

oncle terrible
Команда форума
TsarAlex
читай внимательно. два независимых сайта на ОДНОМ ХОСТЕ.
Что wicked имел в виду под таким глубокомысленным определением - это его проблемы. Но имел он в виду одинаковый, абсолютно одинаковый хост.

проверка - сколько времени прошло между вызовами, к твоему сведению, встроена в механизм сессий. Уже.

еще будут ценные замечания?
 

Apocalepse

Новичок
БаАалин, Фанат, TsarAlex хорошо что вы об этом задискутировали! и сам не заметил этой формулировки "независимых сайта на ОДНОМ ХОСТЕ"
Я уже пару часов е**сь, что бы вствить в эту переменную... Блин еще в школе был не внимательным....
 

dmitrybelyakov

Новичок
А че нельзя просто проверку того же пароля инклюдить в каждую страницу? А логин с паролем хранить в сессии. Мне так кажется это лучше чем хранить статус "авторизован" в сессии или там в куках...
 

Фанат

oncle terrible
Команда форума
это не безопасно, не производительно и не имеет смысла.
поскольку ситуация высосана из пальца.
 

dmitrybelyakov

Новичок
ок. Как тогда надо?

всмысле как хранить данные о том что пользователь уже авторизован.
 

Фанат

oncle terrible
Команда форума
вполне достаточно хранить в качестве признака авторизованности пользователя его идентификатор.
Так же, выше была дана ссылка на некий текст, где автор в конце сам себя запутал, но даётся несколько средств для повышения безопасности.

Ситуация с отключением тоже высосана из пальца, поскольку в нормальной системе сужествует система прав, которые проверяются таки на каждой странице.
 

dmitrybelyakov

Новичок
Автор оригинала: Фанат
вполне достаточно хранить в качестве признака авторизованности пользователя его идентификатор.
Так же, выше была дана ссылка на некий текст, где автор в конце сам себя запутал, но даётся несколько средств для повышения безопасности.

Ситуация с отключением тоже высосана из пальца, поскольку в нормальной системе сужествует система прав, которые проверяются таки на каждой странице.
#1
Пускай высосана, однако ее можно успешно приложить к другой ситуации, которая вовсе не высосана из пальца.

Я вот для примера, сейчас авторизацию пишу - поэтому это актуально.

#2
Вот смотри - ты сам говоришь, что нужно на каждой странице набор прав доставать из базы (допустим), поэтому я не вижу особого расточительства ресурсов еще одно дополнительное поле выдернуть в виде пароля и проверить. (это к вопросу о "не производительно").

Ну вот. а теперь поподробнее почему небезопасно?
Мне кажется, что как раз просто по логину проверять авторизован ли чел - это как раз не безопасно.
 

Фанат

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

dmitrybelyakov

Новичок
Возможно ты прав.

Мне просто так кажется что в сессию можно чего угодно напихать, в том числе, что пользователь уже авторизован. Я не прав?
 

Wicked

Новичок
я в своих проектах в сессии храню $user_id и
PHP:
$user_hash = md5(some_one_valued_function($user_id, $user_pass, $salt));
Значительно надёжнее.
Лично у меня в качестве some_one_valued_function() функция генерации csv-строки из аргументов. Еще удобно брать serialize(func_get_args(...));
 

Apocalepse

Новичок
dmitrybelyakov
ИМХО, просто какой понт пихать в сессию пароль, и потом писать код его проверки, когда можно посто обойтись конструкцией if
 

Apocalepse

Новичок
Проверять, передан ли флаг авторизации, при помощи if.
к приеру:
PHP:
if ($_SESSION['auth']=="yes")
{
Вывод админки
}
else
{print "Вы не авторизированы";}
 
Сверху