войти зарегистрироваться

CodeIgniterCodeigniter: делаем сессии наконец стабильными (прежде всего для авторизаций)

Сессии в Codeigniter хороши всем. Правда, очень удобно сделаны, особенно когда вы храните сессии в БД (что я считаю единственно верным). Куки шифрованные, в куках ничего, кроме идентификатора нету. Они привязываются к user_agent и, опционально, к IP. Красиво, безопасно.

Но есть у них очень существенный недостаток: жизнь сессии считается от поля last_activity. Это значит, что если у вас стоит expire сессии в двое суток, то при обращении к сессии, у которой last_activity < time()-172800, она ликвидируется и начинется новая. Следственно, для того что бы пользователям не приходилось каждый раз логиниться на сайт, last_activity нужно поддерживать в акутальном состоянии.
Поле last_activity обновляется в двух случаях: когда вы записываете что-то новое в сессию, либо когда сессия обновляется (по-умолчанию каждые 5 минут, опять же, относительно last_activity; указывается в конфиге). И вот главная проблема в том, что при обновлении сессии меняется session_id и текущая сессия у пользователя сессия прерывается, стартует новая.

Откровенно говоря, подобное поведение сессий привело меня в состояние… удивления. В таких реалиях использование родных сессий в качестве инструмента поддержки авторизации кажется невозможным…

Проблема «животрепещущая», о ней часто вспоминают на форумах Codeigniter, но толкового решения там нигде я так и не увидел.

Но голь, как известно, на выдумки хитра, поэтому простое решение таки нашлось.

Веб-аналитикаИзменения в учете сессий Google Analytics

В Google Analytics произошли изменения в учете сессий.

Что же изменилось?
Раньше Google Analytics заканчивал сессию в следующих случаях:
  • Прошло больше 30 минут между просмотрами страниц одним посетителем
  • В конце дня
  • Посетитель закрыл браузер
Если произошло одно из этих событий, то следующий просмотр страницы посетителем начнет новую сессию.

В новой модели Google Analytics заканчивает сессию в следующих случаях:
  • Прошло больше 30 минут между просмотрами страниц одним посетителем
  • В конце дня
  • У посетителя изменилось любое из значений источника трафика. Информация об источнике трафика включает в себя следующие показатели: utm_source, utm_medium, utm_term, utm_content, utm_id, utm_campaign и gclid.
Как и раньше, в случае возникновения любого из перечисленных событий начинается новая сессия для посетителя.

Как это повлияет на данные Google Analytics?
Это изменение повлияет только на данные с 11 августа 2011, все прошлые данные останутся без изменений.
Теперь сессия будут предоставлять более точную информацию о посещении. Это будет особенно полезно, если вы используете инструмент Multi-Channel Funnels (многоканальное измерение эффективности рекламы).

Новость в официальном блоге GA: Update to Sessions in Google Analytics

Веб-разработка для начинающихЗащита идентификатора сессий в PHP из песочницы

Безопасность веб-сайтов основывается на управлении сессиями. Когда пользователь подключается к безопасному сайту, он предоставляет учетные данные, как правило, в форме имени пользователя и пароля. Веб-сервер не имеет представления о том, какой пользователь уже вошел в систему и как он переходит от страницы к странице. Механизм сессий позволяет пользователям не вводить пароль каждый раз, когда они хотят выполнить новое действие или перейти к новой странице.

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

После аутентификации пользователя, веб-сервер предоставляет ему идентификатор сессии. Этот идентификатор хранится в браузере и подставляется всякий раз, когда нужна проверка подлинности. Это позволяет избежать повторяющихся процессов ввода логина/пароля. Все это происходит в фоновом режиме и не доставляет дискомфорта пользователю. Представьте, если бы вы вводили имя и пароль каждый раз, когда просматривали новую страницу!

В данной статье я постараюсь изложить все известные мне способы защиты идентификатора сессии в PHP.

Итак, поехали.

Google ChromeGoogle Chrome тестирует новый вариант интерфейса

Как известно, компания Google разрабатывает браузер, нацеленный на максимальную скорость, безопасность и простоту. Каковы успехи браузера на фронтах скорости и безопасности — предмет ожесточённых споров, и однозначного ответа мы не получим, так как критерии сравнения часто различаются, а вот в сфере минимализма графического интерфейса Chrome заставил все браузеры отказаться от нагромождения элементов GUI, панелей и всего прочего, перейдя к сверхкомпактным представлениям. Но разработчики и дизайнеры из Google продолжают навязывать борьбу, бросив ещё вызов конкурентам.

Системное администрированиеАдекватны ли пользователи вашей системы?

image
Наверняка многие использовали для записи сессий командной строки программу script.
А кто-нибудь задавался вопросом, а можно ли использовать её в рамках повышения безопасности/мониторинга/проверки адекватности пользователей системы?
Любопытства ради решил прикрутить script ко всем пользователям системы и посмотреть, что из этого выйдет…

PHPПишем свою реализацию сессий для обработки мертвой сессии перед зачисткой

Мой первый хабратопик, надеюсь, что не последний.

Представим ситуацию: есть корзина покупок на сайте, при добавлении в корзину мы ставим на товар т.н. lock, исключающий его из списка доступных для покупки товаров. Когда клиент удаляет товар из корзины — lock снимается. Но что делать, если пользователь просто закрыл браузер? В таком случае сессия будет удалена сборщиком мусора, а локи так и останутся.

Когда я столкнулся с такой ситуацией, первое что мне пришло в голову — хранить локи и дату доступа в БД и периодически дергать её кроном. Но костыльность этого решения очевидна. А вот ещё бред, с которым я столкнулся при решении сабжа: для сериализации и десереализации сессий используются функции и формат, отличные от функций serialize и unserialize. Приходится делать велосипеды для ансериализации сессии.

Ближе к телу: как решил проблему я…

Информационная безопасностьО самоподписных сертификатах

В связи с моим участием в проекте fin-ack.com постоянно сталкиваюсь с подобными замечаниями:
я не доверяю вашому самоподписному сертификату, почему вы не купите «нормальный» сертификат?

Как по мне, это один из случаев недопонимания и предрассудков, которых так много в отношении безопасности в Интернете. (Вроде знаменитых «Хакеров, крекеров, спамов, куки» :). Хочу разобрать его с двух точек зрения: как человека, некоторое время проработавшего в сфере защиты информации в банке и имевшего дело с большинством аспектов информационной безопасности, и как человека, занимающегося разработкой и развитием интернет-сервиса.

Но сперва отвечу на вопрос, почему у нас нет «нормального» сертификата? (На самом деле, с недавнего времени есть :) Самая главная причина в том, что в нашем списке приоритетов этот пункт стоял на N-ном месте, и только сейчас все N-1 предыдущих пунктов были выполнены. Когда работаешь над новым проектом, всегда приходится от чего-то отказываться, потому что ресурсы, прежде всего временные, ограничены…

А почему же он стоял аж на N-ном месте?
Во-первых, зачем вообще нужен сертификат SSL? Для того, чтобы зашифровать HTTP-соединение между браузером и сайтом, по которому будет передаваться пароль и какие-то другие конфиденциальные данные. Что изменится, если сертификат не подписан доверенным центром сертификации? Ничего! Соединение все равно будет зашифрованно точно также. Единственная возможная проблема: атака человек-посредине, которая в Интернете обычно является phishing'ом или pharming'ом.
  • При фишинге пользователя перенаправляют на сайт с похожим URL. При этом в браузере обязательно появится предупреждение про сертификат (такое же предупреждение появляется и при первом заходе на реальный сайт с самоподписным сертификатом).

    В общем-то, в этой ситуации достаточно просто посмотреть к какому домену относится сертификат, и если это именно тот домен, на который вы хотели попасть, добавить сертификат в доверенные. После этого любое сообщение о недоверенном сертификате для данного сайта можно воспринимать как тревожный звоночек.
  • Отличие фарминга в том, что в данном случае пользователь попадет как-бы на тот сайт, на который хотел (судя по URL). Впрочем, ему также как и при фишинге будет показано сообщение о недоверенном сертификате.

PostgreSQLPostgreSQL. Пользовательские данные в рамках сессии

Недавно у меня возникла интересная задача по хранению некоторых данных в рамках сессии работы с БД PostgreSQL (TTL = время жизни единичного коннекта к базе). Изначальный вопрос был таков…
А можно ли вместо вот такой конструкции:
some_procedure1(user_id, param1, ... , paramN);
...
some_procedureX(user_id, param1, ... , paramN);

использовать такую:
set_user(id);
some_procedure1(param1, ... , paramN);
....
some_procedureX(param1, ... , paramN);

т.е. использовать некую глобальную переменную в рамках сессии для хранения значение идентификатора пользователя, которое будет доступно всем процедурам внутри базы.
Порывшись в гугле, поспрашивав на форуме, я нашел даже не одно решение, а целых 3! Чем с вами и делюсь…

Персональные блоги Сессии вкладок в Опере

Проголосовало 143 человека. Воздержавшихся нет.