Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Система авторизации
 
 автор: KIM   (09.09.2006 в 22:47)   письмо автору
 
 

Вот решил построить сайт с системой авторизации.
Схема работы: На главной странице имеются поля для ввода пароля, логина и кнопка входа. При нажатии на кнопку парольи логин сверяются с паролем и логином из базы данных, если всё правильно, то запускается сессия, регистрируется переменная $_SESSION['aut'] и этой переменной присваивается, допустим, значение "true". После окончания работы скрипта производится переадресация через header("Location: ...") на определённую страницу. Как всем известно, при этом переменная $_SESSION['aut'] будет всегда пока не закроют браузер или через специальный скрипт не диактивируют или не сменят значение. При прогулке по сайту на каждой странице производится проверка вышесказанной переменной:
if (empty($_SESSION['aut']) or $_SESSION['aut'] !=='true'){header("location: error.php"); exit();}
Если нет переменной Aut или её значение иное от "true", то происходит переадресация на страницу error.php, которая в свою очередь оповещает о том , что требуется пройти авторизацию.

Или вместо переменной aut зарегистрировать и использовать 2 переменных, одному из которых присваивается значение из поля "пароль", а другой переменной соответсятвенно из поля "логин", и при посещении каждой страницы сверять значения данных переменных с данными из БД ???

А может я не прав и мыслю не как надо? Посоветуйте пожалуйста

   
 
 автор: programmer_2006   (09.09.2006 в 23:02)   письмо автору
 
   для: KIM   (09.09.2006 в 22:47)
 

Да нормально мыслиш, проверку проходит один раз тогда и регестрируеш переменную сеанса.Зачем базу нагружать. Регестрируеш сессию и потом с ней уже работаеш.

   
 
 автор: kasmanaft   (09.09.2006 в 23:38)   письмо автору
 
   для: KIM   (09.09.2006 в 22:47)
 

Да, но как после этого идентифицировать пользователя? У всех будет aut=1, а что это за пользователь выяснить не удастся.
Пароль хранить в сессии определенно не стоит, а имя можно. Лучше даже в зашифрованном виде (симметричное шифрование)

   
 
 автор: babilonian   (10.09.2006 в 00:10)   письмо автору
 
   для: kasmanaft   (09.09.2006 в 23:38)
 


Пароль хранить в сессии определенно не стоит,

А почему?

   
 
 автор: kasmanaft   (10.09.2006 в 00:45)   письмо автору
 
   для: babilonian   (10.09.2006 в 00:10)
 

Да мало ли... такие вещи лучше нигде не хранить (разве что в базе данных, и то в необратимо зашифрованном виде)

   
 
 автор: programmer_2006   (10.09.2006 в 12:02)   письмо автору
 
   для: KIM   (09.09.2006 в 22:47)
 

Не напряшайте парня. Послушай моего совета а пароль хранить не нужно в сессии сохраняеш только логин.И все.

   
 
 автор: kasmanaft   (10.09.2006 в 12:18)   письмо автору
 
   для: programmer_2006   (10.09.2006 в 12:02)
 

Извините, а я что сказал? ;)
В открытом виде если хранить имя, то любой желающий может стать админом (если его ник знать :) )

Конечно, если имя в сессии нужно не только для " Здравствуйте, $login! Как давно вы к нам не заходили ... "

   
 
 автор: KIM   (11.09.2006 в 08:50)   письмо автору
 
   для: KIM   (09.09.2006 в 22:47)
 

Совсем запутался =).
Мне система авторизации нужна для форума, чтобы пользователи авторизовались.
Вот допустим чел авториизовался удачно и система зарегистрировала переменные $_SESSION['aut'] и $_SESSION['login'], но можно вместо этого просто зарегистрировать переменную $_SESSION['login'] и таскаться с ней по фсему форуму (значение данной переменной Логин пользователя).

Как злоумышленник сможет взломать такую систему?

   
 
 автор: cheops   (11.09.2006 в 12:24)   письмо автору
 
   для: KIM   (11.09.2006 в 08:50)
 

Только если украдёт SID сессии.

   
 
 автор: programmer_2006   (11.09.2006 в 19:19)   письмо автору
 
   для: KIM   (11.09.2006 в 08:50)
 

Все правильно $_SESSION['login'] только эту переменную и рег.Как взломать да не как только ломаю сервак а это уже отдельныйвопрос.
А от кражи SID сессии есть вариант проверки айпишника.

   
 
 автор: KIM   (13.09.2006 в 22:14)   письмо автору
 
   для: programmer_2006   (11.09.2006 в 19:19)
 

А как SID украсть? Подобрать его практически нереально. А украсть?

   
 
 автор: Kero   (13.09.2006 в 22:34)   письмо автору
 
   для: KIM   (13.09.2006 в 22:14)
 

Народ!
Реально вообще без SESSION обойтись безопасно?Я к примеру авторизацию делаю только по куки.

   
 
 автор: cheops   (14.09.2006 в 19:31)   письмо автору
 
   для: KIM   (13.09.2006 в 22:14)
 

SID хранится в cookie или в GET-параметре, GET-параметр может попасть в поисковик - берут от туда, из cookie SID крадётся XSS-атакой.

   
 
 автор: babilonian   (16.09.2006 в 00:07)   письмо автору
 
   для: cheops   (14.09.2006 в 19:31)
 

А если в SESSION хешированный идентификатор сессии передавать, который по таймауту закрывается? Такой вариант на мой взгляд безопаснее будет. Что скажете, Хеопс?

   
 
 автор: cheops   (16.09.2006 в 01:05)   письмо автору
 
   для: babilonian   (16.09.2006 в 00:07)
 

Скажу, что правы... ещё можно полностью реализовать собственный движок сессий http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=5253, в этом случае можно очень гибко работать с сессиями, например, закрывать их после того, как от пользователя нет активности в течении 20 минут.

   
 
 автор: Unkind™   (16.09.2006 в 00:18)   письмо автору
 
   для: KIM   (13.09.2006 в 22:14)
 

А как SID украсть? Подобрать его практически нереально.
Смотря какой SID.

А если в SESSION хешированный идентификатор сессии передавать, который по таймауту закрывается?
Что? :))

GET-параметр может попасть в поисковик
Это еще каким образом? :) Туда может попасть только SID бота-поисковика ведь.

И хранить только логин в файле сессии - не нужно совсем. Зачем? Пароль светить не надо, а если админ захочет изменить пароль, то пользователь ничего не почувствует.

   
 
 автор: cheops   (16.09.2006 в 01:11)   письмо автору
 
   для: Unkind™   (16.09.2006 в 00:18)
 

>Это еще каким образом? :)
Тоже всегда безумно интересовало как они туда попадют... сейчас тему не найду, но есть реальные случае - заказывает человек что-то, а его заказ потом висит в yandex.ru, даже SQL-инъекции в поисковики попадают, не то что SID... По идее такие ссылки никак не должны попадать в резульататы поиска, но попадают... вероятно это работа баннеров поисковых систем, которые считают статистику, а заодно подкармливают ссылками роботов.

   
 
 автор: tAleks   (16.09.2006 в 02:50)   письмо автору
 
   для: cheops   (16.09.2006 в 01:11)
 

Да ахринеть можно... а как тогда от этого защититься?
Как предотвратить попадание SID в поисковик?

   
 
 автор: cheops   (16.09.2006 в 14:19)   письмо автору
 
   для: tAleks   (16.09.2006 в 02:50)
 

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

   
 
 автор: KIM   (16.09.2006 в 20:26)   письмо автору
 
   для: KIM   (09.09.2006 в 22:47)
 

Зачем мучатся со всякими поисковиками и тд и тп. Всё наверно проще если при регистрации переменной сессии с Логином зарегистрировать переменную с ip, и при работе пользователя со страницей сравнивать ИП. Вот и всё! Или это ошибка?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования