Авторизация на PHP - passw & ip address

ev22

Guest
Авторизация на PHP - passw & ip address

Есть желание использовать авторизацию по логину с разрешением логиниться каждому логину только с определенного списка ip адресов ( PHP скрипт)

по примерам с этого сайта :cool: [я в php новичок, но тут понадобилось прикрутить :-]
я так понимаю, что после проверки логина и пароля можно вписать

if (!empty($_SESSION['authorized']) &&
$_SESSION['ip'] == $_SERVER['REMOTE_ADDR'])

(или я неправ ? )

но это будет проверка на соответствие 1 ip адресу.
Нет ли у кого-то скрипта с проверкой адреса по ACL - спискам доступа (аналогично ACL в iptables или apache ) ?

php4 (4.3.10) apache 2.0.53

Спасибо за ответ.
 

Фанат

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

а список надо проверять вообще ДО старта сессии.

в каком формате эти твои ацц списки?
 

AlexFree

Новичок
Я делал через БД. 1 логин <--> 1 ip. В примитиве так:
Код:
$user=$_POST['user'];
$pass=md5($_POST['pass']);
$ip=$_SERVER['REMOTE_ADDR'];

$sql="SELECT uid FROM users
       WHERE user='".$user."'
         AND pass='".$pass."'
         AND ip='".$ip."'";
 

ev22

Guest
>>то, что ты написал - это не проверка по ip адресу.
>>это проверка на то, чтобы сессия велась >>только с одного адреса.

ясно. Отметаем.

>>а список надо проверять вообще ДО старта сессии.

до старта - да, но после проверки логина - т.к. списки разные для разных логинов, один общий я и в апаче сделать могу 8)

>>в каком формате эти твои ацц списки?

правила - allow / deny (тут аналогично апачу)
по умолчанию - все deny .
далее allow на разрешенные адреса и подсети.
одиночный ip адрес - a.b.c.d
cеть + маска - a.b.c.d/[маска в формате '/xx', хх обозначают количесвир единиц в маске, т.е. /24 = 255.255.255.0 ]
[ тут можно полностью как в вапаче, непринципиально]
порядок просмотра - списка - прямой.

-~{}~ 23.02.05 10:32:

>>примитиве так:
>>$user=$_POST['user'];
>>$pass=md5($_POST['pass']);
хранишь только хэши?

$ip=$_SERVER['REMOTE_ADDR'];
получаем ip клиента - в случае прокси тут будет отдан адрес клиента (который forwarded for) или прокси ?

>>$sql="SELECT uid FROM users
с выборкой понятно, тут вопросов нет.


Спасибо за ответ.
 

Фанат

oncle terrible
Команда форума
ну так какая проблема прочитать этот список айпей, найти в нем нужный логин, прочитать разрешенные айпи и посравнивать их с $_SERVER['REMOTE_ADDR'] ?
получаем ip клиента - в случае прокси тут будет отдан адрес клиента (который forwarded for) или прокси ?
тебе, человеку знакомому с апачем, должно быть известно, что лежит в переменной окружения 'REMOTE_ADDR'. Подсказка. Поля запроса НТТР не имеют к нему отношения.
 

AlexFree

Новичок
>>$pass=md5($_POST['pass']);
хранишь только хэши?
Да, в БД храню только хэши.

Кстати интересная тема по поводу
PHP:
$ip=$_SERVER['REMOTE_ADDR'];
получаем ip клиента - в случае прокси тут будет отдан адрес клиента (который forwarded for) или прокси ?
Я пробовал с прокси, получил АйПи прокси.
Как с этим быть? Возможно ли определить ip с прокси?

-~{}~ 24.02.05 15:48:

в смысле, если есть прокси, как правильно определить ip?
 

yugene

Отошел от дел
Автор оригинала: AlexFree
Я пробовал с прокси, получил АйПи прокси.
Как с этим быть? Возможно ли определить ip с прокси?
Либо HTTP_X_FORWARDED_FOR, либо никак (для анонимного прокси).
 

Фанат

oncle terrible
Команда форума
надо только понимать, что полагаться на эти все фитюльки не стоит
 

yugene

Отошел от дел
Да, HTTP_X_FORWARDED_FOR вполне может быть IP-шником предыдущего проксика :)
 

Фанат

oncle terrible
Команда форума
HTTP_X_FORWARDED_FOR вполне может быть прописан шалавливыми ручками в проксомитроне либо подделан любымс другим немудрящим способом.
 

AlexFree

Новичок
Автор оригинала: Фанат
HTTP_X_FORWARDED_FOR вполне может быть прописан шалавливыми ручками в проксомитроне либо подделан любымс другим немудрящим способом.
Так существуют варианты (средствами ПХП) определения ip посетителя, кроме названных?
 

Фанат

oncle terrible
Команда форума
Для того, чтобы ответить на этот некорректный вопрос, надо, чтобы человек, его задающий, был знаком с основами протоколов TCP/IP и HTTP.

Если отвечать буквально, то пхп ВООБЩЕ ничего определить не может. Он может получить некоторые переменные окружения, которые ему отдает веб-сервер.
в частности - инициатора TCP/IP сессии и НТТР заголовки.
пхп - это не антишпионская тулза, а процессор гипертекста.
И никаким определениями он не занимается в принципе.

И тем более он не занимается определением того, чего автор вопроса даже сформулировать не умеет.
 
Сверху