2013-07-01 2 views
7

Я кодирую веб-сайт на PHP, содержащий boolean $_SESSION['logged_in']. Это значение равно true, когда совпадение имени пользователя и пароля присутствует в базе данных.Сессия spoofing (PHP)

Я совершенно новичок в сессиях и просто задавался вопросом, возможно ли, если бы незарегистрированный (или, если на то пошло, зарегистрированный) пользователь мог обойти процесс входа в систему, установив это значение в boolean на true, что было бы возможно с помощью печенье.

Я понимаю, что пользователь должен будет манипулировать серверной переменной с клиентской стороны, но мои вопросы в том, насколько легко это будет так, как бы пользователь мог выполнить такую ​​задачу, есть ли какие-либо известные эксплоиты , и каковы наилучшие методы/превентивные меры, чтобы избежать такого рода нападений?

+2

Если клиент может изменить данные сеанса на сервере, если вы специально не разрешаете ему, у вас есть больше проблем, чем это. Меня больше беспокоит какой-то дерьмовый общий хостинг с некоторым общим временным каталогом, в котором хранятся данные сеанса. Или даже фиксацию сеанса. – PeeHaa

+0

@PeeHaa, согласовано. – verbumSapienti

+0

http://stackoverflow.com/questions/6912223/is-it-possible-to-change-a-session-variable-client-side –

ответ

14

Начнем с хороших новостей: массив $_SESSION по умолчанию полностью невидимый и не поддающийся обработке клиентом: он существует на сервере и только на сервере, в среде выполнения, которая не открыта для клиента.

Теперь вернемся к земле: довольно легко получить код PHP «почти справа» и таким образом открыть дверь между клиентом и сеансом, как видно на сервере. В дополнение к этому, краже клиентского сеанса (включая файл cookie) довольно просто.

Я рекомендую несколько смягчение, которые были доказаны весьма эффективными:

  • Не храните «вошедшим» значение - вместо того, чтобы сохранить «сессии куки» значение, и установить куки клиенту. По запросу клиента сделайте что-то по строкам $loggedin=($_SESSION['cookie']==$_COOKIE['session']). Это делает злоумышленнику обоим: cookie и идентификатор сеанса.
  • Обновите сессионный файл cookie довольно часто, в неправильном cookie-файле убейте сеанс. Если черная шляпа украдет файл cookie и сеанс, следующий клик реального пользователя выйдет из системы и создаст регистрируемое событие.
  • Если ваши запросы поступают из JS, подумайте о создании простой функции проверки подлинности: вместо отправки токена аутентификации, солейте его, перепишите его с отметкой времени, а затем введите его. Отправить соль, метку времени и хэш. Сделайте проверку сервера отметкой времени.
+0

благодарю за информацию и отличные предложения – verbumSapienti

+1

Мне понравилась соль перца –

1

Невозможно, чтобы кто-либо, кроме вашего кода, манипулировал значениями в сеансе. Чтобы кто-то обошел это, ему пришлось бы иметь разрешение на запуск кода на сервере или использование дыры в безопасности вашего кода или сервера (в любом случае, это эксплойт безопасности). Если пользователь может это сделать, ему, вероятно, не нужно беспокоиться о том, чтобы играть с значениями сеанса, так как он может делать практически что угодно на сервере напрямую.

0

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

1

Наиболее распространенной проблемой, встречающейся в домене сеансов, является Session Hijacking. Это связано с тем, что сеансы связаны с параметром session. Этот параметр должен предоставляться пользователем каждый раз, когда он отправляет запрос на сервер. Как вы можете себе представить, может ли кто-то угадать или получить параметр, они должны «захватить» сеанс.

Редактировать: Для того чтобы принять меры безопасности, взгляните на сообщение Eugen Reck.