Перейти к контенту

Как мы ломали

  • записи
    24
  • комментариев
    147
  • просмотра
    16 233

Ковыряем сессии


MiksIr

180 просмотров

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

if( $this->ipsclass->vars['match_ipaddress'] )
{
 //-----------------------------------------
 // Delete any old sessions with this users IP
 // addy that doesn't match our session ID.
 //-----------------------------------------

 $this->ipsclass->DB->simple_construct( array( 'delete' => 'sessions',
			 'where'  => "ip_address='".$this->ipsclass->ip_address."' AND id <> '$session_id'"
 ));

 $this->ipsclass->DB->simple_shutdown_exec();
}

Кто-нибудь может объяснить смысл этого действия? Почему мы удаляем сессии с тем же IP и как быть с другими чуваками с таким же IP.

12 комментариев


Рекомендуемые комментарии

$this->ipsclass->vars['match_ipaddress']

настройка, которая стоит в безопасности

говорит она

Проверять IP адреса пользователей при проверке сессий

Если 'Да', то IP адрес пользователя для безопасности будет помещен в таблицу сессий. Используйте 'Нет' в интранете, где несколько пользователей могут иметь один IP адрес.

если кто-то узнает сессию админа, то он просто войдет по ней в строке адреса index.php?s=1234567890123456

вроде бы так

Ссылка на комментарий

смысл в том, что это находится в функции do_log_in, и если сказано, одна сессия - один адрес, то будет одна сессия

 

Прапорщик рассказывает солдатам про выстрел из пушки:

- Пушка стреляет, жидкость сжимается, пушка заряжается...

Один солдат:

- Товарищ прапорщик, я в институте учился, нам говорили, жидкость не сжимается

Прапорщик:

- Так, непонятно, рассказываю еще раз. Пушка стреляет, жидкость сжимается, пушка заряжается...

Солдат:

- Товарищ прапорщик, я учился, жидкость не сжимается.

Прапорщик:

- Так, солдат, два наряда вне очереди.

Проходит два наряда, прапорщик спрашивает:

- Ну как, жидкость сжимается?

- Товарищ прапорщик, я учился, нам говорили, жидкость не сжимается.

- Ещё два наряда вне очереди.

Проходит два наряда, прапорщик спрашивает:

- Ну что, сжимается жидкость?

- Товарищ прапорщик, я учился, нам говорили, жидкость не сжимается, НО ВОТ В АРМИИ СЖИМАЕТСЯ.

:lol:

Ссылка на комментарий

Да не сказано, что одна сессия - один адрес ;) Сказано, что при проверке сессии будет проверка - совпадает ли записанный ранее IP с адресом клиента. Это понятно, вопросов нет.

Окей, опция включена, логинится человек... и мы гробим сессии всех чуваков с тем же IP. И если, как я понимаю, у них нет автологина, то их разлогинивает. Здрасти, приехали - мало того, что отсутствие полезного смысла, еще и вредоносный есть ;)

Ссылка на комментарий

Вроде говорим на одном языке...

Кто и где сказал, что один IP - одна сессия. Сказано - сессия привязана к IP. Но не IP привязанно к сессии. Давайте, может, не как в армии солдат тупить будем, а подумаем?

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

Замечательно.

А теперь попытайтесь мне так же внятно объяснить, какую безопасность в каком месте увеличивает удаление _всех_ сессий с тем же IP, что и у того, кто логинится? Ну не понимаю я, почему если из локальной сети на форуме сидит 5 человек (для форма они один IP адрес) и у каждого _своя_ сессия, то 4 из них сидят незаконно, и 5-й пройдя логин их выкидывает.

Ссылка на комментарий
то 4 из них сидят

такого не может быть никогда

каждый новый вошедший выкидывает предыдущего

Используйте 'Нет' в интранете, где несколько пользователей могут иметь один IP адрес.

сама настройка говорит, что НЕ МОЖЕТ быть двух и более пользователей с одним адресом одновременно

механизм реализации да, может и не лучший, но тем не менее, так или иначе, он реализует эту идею

Ссылка на комментарий

> сама настройка говорит, что НЕ МОЖЕТ быть двух и более пользователей с одним адресом одновременно

Хорошо, ладно.. значит это не косяк пьяного разработчика, а осознанная проверка и делает то, что задумано... Так в чем смысл этой безопастности? Что предотвращает такая проверка, какой вид атаки? Не понимаю я, чем мешает безопасности наличите 2-х пользователей с разными сессиями и одним IP.

 

> каждый новый вошедший выкидывает предыдущего

И, кстати, выкидывает ли? Если у этих 4-х автологин стоит... сложилось впечатление, что автологин не проходит через эту проверку - хотя тут может еще до конца не разобрались как там все работает.

Ссылка на комментарий

Для фаирфокса есть замечательная штука - переключатель профилей кук ;) Для разработки, когда нужно отладить что-то под разными типами юзеров - самое оно ;)

Только где тут дыра в безопасности то? ;)

Ссылка на комментарий

Это скорее не безопасность, а недовольный вой некоторых админо-юзеров, которые требуют что-то типа "один ip - одна регистрация" и т.д.

На самом деле принципиальной опасности не вижу, но настройка делает не только эту глупость, но и действительно проверяет вход по строгому И

			if ( $this->ipsclass->vars['match_ipaddress'] == 1 )
		{
			$query .= " AND ip_address='".$this->ipsclass->ip_address."'";
		}

		$this->ipsclass->DB->simple_construct( array( 'select' => 'id, member_id, running_time, location',
													  'from'   => 'sessions',
													  'where'  => "id='".$session_id."'".$query
											 )	  );

Сам полез смотреть.

В автологине вообще смотрят только по куки, никаких сессий не затрагивая, т.е. даже если сессии нет, то она создастся для заавтологинившегося, а значит все это удаление - какая-то перестраховка.

Ссылка на комментарий

Угу, перестраховка, котрая непонятно кому нужна и реально может мешать если на форуме есть пользователи с одного IP (а это сейчас не редкость) и у них нет автологина.

В общем, сносим ;) Спасибо, а то уже сомнения - мож чего не понимаю, мож глубокий смысл какой...

Ссылка на комментарий
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.