PHP: безопасность сеанса - PullRequest
       10

PHP: безопасность сеанса

1 голос
/ 07 октября 2010

Я читал о безопасности сеанса, например. Фиксация сессии, угон и инъекция, но я не совсем понимаю, как работает безопасность сессии. Как я обычно это делаю:

// when user logins, 
$_SESSION["user"] = "someuser";

// check user login
if (isset($_SESSION["user"]) && !empty($_SESSION["user"]))

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

Фиксация сессии

  • Ссылка на посещение пользователя (http://site.com? Session_id = 123) и вход в систему
  • Сервер "помечает" этот идентификатор сеанса как зарегистрированный в
  • Хакер теперь может посетить http://site.com? Session_id = 123

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

Session Hijacking

  • Хакер каким-то образом получает идентификатор сеанса либо путем фиксации, либо путем угадывания и т.д.

Инъекция сеанса

  • Что это?

Ответы [ 2 ]

1 голос
/ 07 октября 2010

При использовании сеансов идентификатор сеанса является единственной информацией, используемой для идентификации сеанса.Из-за этого идентификатор сеанса является конфиденциальной информацией.

Теперь обе атаки, перехват сеанса и фиксация сеанса , стремятся к действительному идентификатору сеанса жертвы.получить доступ к этой сессии.Что касается перехвата сеанса, злоумышленник пытается получить идентификатор сеанса жертвы, а что касается фиксации сеанса, злоумышленник пытается навязать подготовленный сеанс жертве.две общие меры безопасности:

  • защита допустимых идентификаторов сеансов и
  • проверка подлинности использования сеансов.

При настройках сеанса PHP по умолчанию идентификатор сеансапередается с использованием файла cookie (см. session.use_only_cookies ).Вы можете защитить этот файл cookie, используя безопасное соединение с SSL / TLS и задав session.cookie_httponly до true , чтобы файл cookie мог быть прочитан только при отправке.через HTTP, а не с помощью клиентской программы, такой как JavaScript.

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

Кроме того, вы должны изменять идентификатор сеанса при каждой проверке подлинности или изменении авторизации.Для этого вы можете использовать session_regenerate_id(true) с аннулированием старого идентификатора сеанса.

1 голос
/ 07 октября 2010

Вы не используете идентификаторы сессии явно, но PHP использует их автоматически. Идентификатор сеанса отправляется в виде файла cookie в браузер, который отправляет его обратно на сервер с каждым запросом для идентификации себя и возобновления сеанса. Без этого сеансы невозможны.

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

Другой способ предотвратить перехват сеанса (хакер использует ваш идентификатор сеанса для кражи сеанса) - сохранить IP-адрес клиента и строку агента пользователя при открытии сеанса и убедиться, что они не изменились при возобновлении сеанса. 1006 *

...