Проблема с сессиями и авторизацией

Procel

Новичок
Проблема с сессиями и авторизацией

Для начала код простого веб-приложения, который создаёт сессию.

PHP:
<?php
if (!empty($_POST['word'])) {
		session_start();
		$_SESSION['ip'] = $_SERVER['REMOTE_ADDR']; 
		$_SESSION['word'] = $_POST['word'];
}

if (isset($_REQUEST[session_name()])) session_start();
if (isset($_SESSION['word']) AND $_SESSION['ip'] == $_SERVER['REMOTE_ADDR']) {
	echo 'Слово: '.$_SESSION['word'];
} else {
	echo 'Введите слово: ';
}
?>

<form method="POST" action="index.php">
	<input type="text" name="word">&nbsp;<input type="submit" value="Ok">
</form>
Теперь суть проблемы. Существует локальная сеть под управлением нескольких серверов. Главный сервер предоставляет доступ в Интернет через UserGate. К нему подключено ещё куча всякого, в том числе и участок сети с 10 компьютерами. Если запустить страничку в Интернете с этим скриптом с одного компьютера и выполнить его, т.е. пройти "авторизацию", то при открытии этого скрипта на соседнем компьютере мы уже будем "авторизированными". Как с этим можно бороться, не меняя архитектуру сети?))) т.е. какие изменения можно внести в скрипт или веб-сервер (он с главным сервером, кроме как через Интернет, никак не связан)...?
 

Фанат

oncle terrible
Команда форума
Если запустить страничку в Интернете с этим скриптом с одного компьютера и выполнить его, т.е. пройти "авторизацию", то при открытии этого скрипта на соседнем компьютере мы уже будем "авторизированными".
Сказки рассказывают на сайте дисней.ком
 

Фанат

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

Procel

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

флоппик

promotor fidei
Команда форума
Партнер клуба
Сказки рассказывают на сайте дисней.ком
Это правда.
Не надо полагатся на remote_addr заходя через браузер с прописанным прокси в этой же сети — remote_addr = ip прокси, раздающего инет. Либо вписывайте локальные адреса в исключения прокси, либо — пишите авторизацию нормально.

-~{}~ 24.11.08 12:02:

Проблема и правда надуманная. Не надо авторизировать по IP. Хочешь прозрачной авторизации доменных пользователей — копай LDAP и AD, а не городи самопридуманную ересь.
 

Beavis

Banned
а разве не может быть такого что этот UserGate железно кеширует страницу, и другому юзеру отдает кеш страницы, где авторизация уже пройдена?)
 

MiRacLe

просто Чудо
*****
У тебя сказкой является всё с чем ты лично не сталкивался?

Procel
Отключи агрессивное кеширование/исключи сервер из списка кешируемых
 

Фанат

oncle terrible
Команда форума
ты считаешь, что там даже кука кэшируется?

-~{}~ 24.11.08 11:49:

А, или речь о самой странице.
Ну, не знаю. Я такого не встречал.
А сказкой я считаю то, что мне рассказывают с серверной точки зрения.
 

MiRacLe

просто Чудо
да, есть масса тупорогих проксей (и админов этих проксей), которые кешируют по урлу, плевав на всё остальное (куки, кеш-контрол и т.д.)
 

Фанат

oncle terrible
Команда форума
Но тогда ведь должны быть проблемы у всех сайтов, не только у этого
 

Procel

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

Проблемы были и у mail.ru и т.п. сервисов... просто впервые столкнулся с такой проблемой, а админ ничего менять не хочет :(
 

Фанат

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

Procel

Новичок
Автор оригинала: флоппик
Это правда.
Не надо полагатся на remote_addr заходя через браузер с прописанным прокси в этой же сети — remote_addr = ip прокси, раздающего инет. Либо вписывайте локальные адреса в исключения прокси, либо — пишите авторизацию нормально.
Действительно, привязки только к IP тут нет... скриптик был вытянут из faq'а с этого сайта в качестве примера. И авторизация в реальном скрипте вполне нормальная. Но всё равно спасибо. LDAP и AD обязательно посмотрю, хотя сомневаюсь, что поможет.. да и это скорее всего к админу сети нужно отнести
 

Фанат

oncle terrible
Команда форума
можно еще перегенерировать сид при каждом запросе.
но тогда не будет работать кнопка "назад"

-~{}~ 24.11.08 16:56:

или нет. за этой проксей, как раз, будет.
 

Procel

Новичок
Автор оригинала: *****
Можно добавлять в урл случайную строку, которую записывать в сессию.
Но не сам сид.
т.е. сгенерировали случайную строку, записали её в сессию, передали эту строку следующей страничке.. в это время заходит другой, для него генерируется случайная строка, записывается в сессию заместо старой.. и? где сверять значение строки в урл со значением в сессии? получается, что сессия старого пользователя по сути прекращена.. или я не так понял? или привязывать данные о пользователе к этому случайному значению?

-~{}~ 24.11.08 17:01:

Автор оригинала: *****
можно еще перегенерировать сид при каждом запросе.
но тогда не будет работать кнопка "назад"

-~{}~ 24.11.08 16:56:

или нет. за этой проксей, как раз, будет.
Сайт целиком на аяксе, кнопка назад не нужна... Буду пробовать. Спасибо ещё раз.
 

dimagolov

Новичок
Procel, нет, сверять с сессией не нужно. это нужно чтобы прокся не отдавала эту же страницу кому другому. тоесть не SID светить в URL, а некий случайный параметр, его можно сохранить в сессии и вставлять во все URL, тогда кешироваться будет для кадой сессии индивидуально. А читать этот параметр вообще не нужно ни для чего, он только для прокси предназначен.
 

Фанат

oncle terrible
Команда форума
две страницы.
auth.php и secret.php
первый заходит на секрет, он не авторизован, его кидает на auth, он вводит слово, и его кидает на секрет со строкой. он щаслив.
второй заходит на секрет, в проксе от секрета только перенаправление на auth

-~{}~ 24.11.08 17:10:

если целиком на аяксе, то можно и сид в адрес писать. если ссылки нигде не светятся.

-~{}~ 24.11.08 17:16:

но подозревается мне, что проблема тут не в проксе
 
Сверху