Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2008, 22:09   #1
Gorychev
Участник клуба
 
Аватар для Gorychev
 
Регистрация: 08.03.2008
Сообщений: 1,603
По умолчанию Идентификация пользователя

Каким образом можно идентифицировать пользователя средствами ПХП, без вывода запроса на логин и пароль каждый раз при посещении страницы. Имеется ввиду не в рамках одного сеанса. Т.е. один раз пользователь зарегился, а потом автоматом его определять, например как на нашем форуме.

Напишу как я представляю себе этот механизм, а вы меня поправьте или предложите свой вариант.
Предполагается, что cookie у клиента включены (если отключены, то вообще не представляю как с этим бороться, наверное, определять IP). Так вот первый раз запросить логин, пароль, после регистрации отослать на ПК пользователя cookie с уникальной id-строкой и сроком действия например 1год(не знаю сколько надо). Логин, пароль и id-строку сохранить в БД. Потом каждый раз в сценарии пытаться считывать cookie с id-строкой и искать ее в БД. Таким образом, можно будет узнать зарегистрирован юзер или нет, если да его логин и т.д.

Наверное можно как-то определять\запоминать(в БД) IP пользователя, а потом этим пользоваться. Или вообще обьеденить эти 2 способа(cookie и IP), в целях безопасности.
Как использовать cookie и БД я знаю, как определить IP нет.
Подскажите пожайлуста как поступить правильно.
Gorychev вне форума Ответить с цитированием
Старый 25.09.2008, 22:29   #2
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Gorychev
Ты блестяще справился с задачей. Только два замечания:
1) уникальную строку нужно менять каждый раз как пользователь заходит на сервер после долгого перерыва, то есть при начале новой сессии. Это нужно для безопасности (чтобы другой человек украв эту id-строку не мог пользоваться аккаунтом жертвы постоянно). Также строку нужно менять при каждом вводе пользователем логина и пароля.
2) IP адрес не является идентификатором пользователя. У двух пользователей может быть один ИП. Один и тот же пользователь может заходить с двух разных ИП адресов (дом и работа). А также не забываем, что у многих динамический ИП адрес.

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

Update: да, и время действия куки зависит от того, что за ресурс у тебя. На форумах от 3 дней, до месяца. На админских панелях 1 день обычно.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?

Последний раз редактировалось Johnatan; 25.09.2008 в 22:32.
Johnatan вне форума Ответить с цитированием
Старый 26.09.2008, 00:12   #3
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,239
По умолчанию

У меня например запрещены все куки и рефералы. Как такой случай?
Alter вне форума Ответить с цитированием
Старый 26.09.2008, 01:48   #4
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Alter
Не пробовал в интернет заходить без подключения к интернету? Как тебе такой случай? Или ездить на машине без коробки передач и руля?
Имхо очень глупо "обрубать фичи" и ждать что кто-то за тебя решит, как же тебе сделать удобнее. Тебе просто прийдётся каждый раз вводить логин и пароль при посещении страницы.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 26.09.2008, 12:51   #5
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,239
По умолчанию

машина без коробки передач и руля: Электромобиль с автопилотом. Я не шучу, такое есть в природе.
по форуму programmersforum без проблем перехожу со страницы на страницу, ничего нетребует, только если Очень долго неиспользую ссылки страниц.

Последний раз редактировалось Alter; 26.09.2008 в 12:54.
Alter вне форума Ответить с цитированием
Старый 26.09.2008, 14:31   #6
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Alter
Значит этот форум добавлен в "белый лист" и кукисы с него разрешены. При этом существует такая вещь как сессии, которыми пользуется этот форум.
Также есть система хранения данных на сервере, с идентификацией пользователя посредством броузера и флеша.

З.Ы. Если я тебя попрошу научить меня строить такой электромобиль, ты меня научишь ведь, правильно?
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 26.09.2008, 19:23   #7
Gorychev
Участник клуба
 
Аватар для Gorychev
 
Регистрация: 08.03.2008
Сообщений: 1,603
По умолчанию

Теперь ситуация прояснилась. Когда напишу код выложу его опять в этой теме.
Johnatan отдельное спасибо.
Gorychev вне форума Ответить с цитированием
Старый 02.10.2008, 13:39   #8
KAKTYC
Заблокирован
Пользователь
 
Регистрация: 16.07.2008
Сообщений: 12
По умолчанию

лично я всегда юзаю вот этот код для аунтификации юзера:
Код:
if (!isset($_SERVER['PHP_AUTH_USER']))

{
        Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
        Header ("HTTP/1.0 401 Unauthorized");
        exit();
}

else {
        if (!get_magic_quotes_gpc()) {
                $_SERVER['PHP_AUTH_USER'] = mysql_escape_string($_SERVER['PHP_AUTH_USER']);
                $_SERVER['PHP_AUTH_PW'] = mysql_escape_string($_SERVER['PHP_AUTH_PW']);
        }

        $query = "SELECT pass FROM admin WHERE user='".$_SERVER['PHP_AUTH_USER']."'";
        $lst = @mysql_query($query);

        if (!$lst)
        {
            Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
        Header ("HTTP/1.0 401 Unauthorized");
        exit();
        }

        if (mysql_num_rows($lst) == 0)
        {
           Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
           Header ("HTTP/1.0 401 Unauthorized");
           exit();
        }

        $pass =  @mysql_fetch_array($lst);
        if ($_SERVER['PHP_AUTH_PW']!= $pass['pass'])
        {
            Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
           Header ("HTTP/1.0 401 Unauthorized");
           exit();
        }


}
KAKTYC вне форума Ответить с цитированием
Старый 22.10.2008, 13:34   #9
Gorychev
Участник клуба
 
Аватар для Gorychev
 
Регистрация: 08.03.2008
Сообщений: 1,603
По умолчанию

Цитата:
Когда напишу код выложу его опять в этой теме
Как обещал, выкладываю код.
Пару слов о файлах:
_create_t.php - создает БД и таблицу (запустить в первую очередь)
index.php - обычная страница сайта
get_login.php - возвращает логин юзера и дату последнего визита
get_info.php - роется в БД, ищет значение кука, который считан с ПК юзера, если кук найден, определяется логин и дата последнего визита, посылается новый кук с id строкой, меняется дата последнего визита. Затем обновленные данные записываются в БД.
valid_user.php - при клике на ссылке для скачивания архива проходит проверка, если это Гость - перенаправляется для регистрации, если зарегистрированный юзер - на файл архива
form_id.php - форма регистрации
set_info.php - при регистрации выполняются все необходимые действия, и данные заносятся в БД.

Смысл такой - архив могут скачать только зарегистрированные юзеры.
Жду ваших замечаний по поводу алгоритма, безопасности и т.п.

Сайт загнал на хостинг, его работу "вживую" можно глянуть здесь http://testuserid.ex6.ru/
Вложения
Тип файла: rar _id_test.rar (7.1 Кб, 95 просмотров)
Gorychev вне форума Ответить с цитированием
Старый 10.02.2009, 08:56   #10
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,219
По умолчанию

Цитата:
Сообщение от Alter Посмотреть сообщение
У меня например запрещены все куки и рефералы. Как такой случай?
Не понимаю людей, стремящихся отрубить куки и прочее. Я при проектировании движков всегда рассматриваю случай выключенных у пользователя JavaScript (сам раньше так сидел, хотя это тоже глупо). Но вот отсутствие поддержи куки я не рассматриваю. Нет ни малейшего повода отключать эту поддержку, а если и отключили - ждите сложностей с авторизацией.
А на счёт того, что некоторые считают куки небезопасными, мол, через них могут получить доступ к учётной записи. Это бред. А сложилось такое мнение потому, что чаще всего взлом учётной записи предполагает воровство куки, вот пользователь и думает а если у меня нет куки - значит меня не взломают.
Но вот, смотрите, допустим аутентификация на сайте происходит по коду сессии (без привязки к IP и браузеру). Вытащить этот код из куки можно в том случае, если в движке есть уязвимости, позволяющие исполнить JavaScript. Если же мы отключили JavaScript - получить сессию через браузер невозможно.
А если мы выключили куки, то движок подставит код сессии в GET. А из GET вытащить этот код на порядок проще, чем из куки, достаточно заставить пользователя перейти на сайт, в котором ведутся логи Referer'ов.
Да, можно и их отключить. Представляю картину: пользователь без поддержки куки, рефереров, яваскрипт, с отключёнными картинками, без Flash, без Java. Можно для надёжности ещё и поддержку CSS отключить - тогда точно ни кто не взломает
Arigato вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление пользователя треч О форуме и сайтах клуба 4 26.05.2008 21:38
Спросить у пользователя его имя snake-as Общие вопросы Delphi 7 21.05.2008 20:02
Идентификация пользователя на каком-либо сайте. Продвинутые пользователи - к Вам вопрос. Макса Безопасность, Шифрование 9 23.10.2007 21:36
Определение неактивности пользователя Квэнди Общие вопросы Delphi 3 26.09.2007 19:24
Имя пользователя Albenous Win Api 3 20.01.2007 22:39