Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Авторизация на php
Форумы портала PHP.SU » » Вопросы новичков » Авторизация на php

Страниц (1): [1]
 

1. improbable - 17 Марта, 2012 - 17:39:08 - перейти к сообщению
Я еще недостаточно опытен, чтобы оценить все плюсы и минусы данного метода.
Я не знаю, существует ли он вообще, просто пришло на ум сделать, - сделал.

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.         $ip = $_SERVER['REMOTE_ADDR'];
  3.                         include 'database.php';
  4.                         $status = '1';
  5.                                 $query = 'SELECT * FROM `sessions` WHERE `ip` = "'.$ip.'" AND `status` = "'.$status.'"';
  6.                                 $sql = mysql_query($query);
  7.                                         if(!mysql_num_rows($sql)){
  8.                                                 echo "you are not logged";
  9.                                                                                }
  10.                                         else                                 {
  11.                                                 echo "you are logged";
  12.                                                                                }
  13. ?>


При авторизации через специальную форму, в таблицу `sessions` заносятся данные об IP адресе пользователя, дате входа, имени пользователя.
При следующем входе на страницу, для входа на которую нужна авторизация, нас пропускает, так как IP с тех пор не изменился. Каждый IP соответствует конкретному пользователю, так же, при входе, будет обнуляться статус всех сессий для всех пользователей с данным IP. При выходе то же самое.

Какие плюсы, минусы?
P.S. Я знаю, что IP можно подделать, но ведь для этого надо его знать...
2. tarweb - 17 Марта, 2012 - 18:16:54 - перейти к сообщению
Прикольно !
Например я зарегистрировался с домашнего компа а потом зашел, например с работы - и что?
3. improbable - 17 Марта, 2012 - 18:20:16 - перейти к сообщению
tarweb пишет:
Прикольно !
Например я зарегистрировался с домашнего компа а потом зашел, например с работы - и что?


Не имеет значения место регистрации.
При авторизации в БД заносятся данные о текущем IP адресе и имени пользователя (имя пользователя вводится при авторизации). После этого авторизация не требуется, пока IP не поменялся. Если заходите с работы - ваша домашняя сессия сбрасывается, создается новая, с рабочим IP адресом.
4. tarweb - 17 Марта, 2012 - 18:52:37 - перейти к сообщению
Если IP дополнительная защита - то через прокси непонятно.
5. improbable - 17 Марта, 2012 - 18:54:49 - перейти к сообщению
tarweb пишет:
Если IP дополнительная защита - то через прокси непонятно.

Непонятно то, что ты написал))
О какой защите идет речь?
Я просто предложил альтернативу cookies, которые крадут всегда.
Хочу у опытных узнать уязвимости этого метода.
(Добавление)
Если бы вы хоть чуть-чуть шарили в php, то по коду всё бы поняли
6. tarweb - 17 Марта, 2012 - 19:01:08 - перейти к сообщению
По Вашему коду(недописаному) видно, что Вы проверяете количество пользователей с одним IP
7. improbable - 17 Марта, 2012 - 19:06:21 - перейти к сообщению
Нет, проверяются сессии со статусом 1, где IP равен IP машины.
Если таковая строчка найдена в БД - пользователя пускает, дезактивируя (присваивая статус 0) все остальные сессии данного IP и пользователя.

При авторизации в таблицу `sessions` добавляется строка, в которую заносятся session_id, username, IP, дата входа и статус сессии, который по умолчанию равен 1 (включен).

При авторизации с другой сети, скрипт выключит все сессии для конкретного (того, на который заходят) username.

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

Теперь понятно, или сделать пример?
8. Okula - 17 Марта, 2012 - 19:08:09 - перейти к сообщению
improbable пишет:
Если бы вы хоть чуть-чуть шарили в php, то по коду всё бы поняли

По куску кода приведённому тобой понятно только то что ты делаешь выборку из базы по IP адресу. К тому же не практично хранить IP адрес в базе в таком виде котором он отдаётся браузером. Есть специальные функции long2ip() и ip2long()
Данный метод не является практичным, т.к. авторизация будет ненадёжна (это касается мобильных устройств, восновном браузеров Opera Mini, которые используют прокси сервера, которые могут менятся в течении 1 сеанса несколько раз).
Уж лучше писать в куки или сессии и исключить возможность утечки информации с вашего сайта (читайте статьи по безопасности, в частности раздел о кроссайтовом скриптинге - XSS).
9. improbable - 17 Марта, 2012 - 19:10:24 - перейти к сообщению
Я, в-принципе, и не планирую использовать этот способ для мобильных устройств..

 

Powered by ExBB FM 1.0 RC1