Безопасность в файлах cookie php сессии - PullRequest
1 голос
/ 29 марта 2012

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

Например: помещать ли session_regenerate_id() перед каждым файлом cookie сеанса? О чем мне еще думать? Я спрашиваю об особенностях в коде - примеры, если это возможно.

Большое спасибо.

Я использую 4 сеансовых куки после входа в систему.

SESSION "site_logged_in" = true
SESSION "site_user_nr" = the number of the user to access user_table_nr
SESSION "site_user_id" = the user's id to use when changing data in tables
SESSION "site_user_name" = the name of the user to display on page

Когда я проверяю, есть ли у пользователя доступ, я проверяю, установлены ли все 4 куки-файла и установлено ли значение site_logged_in в true.

Есть ли лучшие способы? У меня совершенно неверное представление об этом? Можно ли легко взломать пользователей?

Ответы [ 3 ]

1 голос
/ 29 марта 2012

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

Это означает, что вы можете безопасно поместить некоторые данные в $ _SESSION, и только пользователь, у которого есть cookie с соответствующим идентификатором сеанса, может прочитать их.

О взломанных пользователях.Да, их можно взломать до тех пор, пока вы не используете HTTPS-соединение, поскольку файлы cookie и все другие данные передаются в виде открытого текста, поэтому, если кто-то перехватывает файлы cookie пользователей, он может получить доступ к данным, сохраненным в сеансе.

0 голосов
/ 29 марта 2012

Информация о сеансе сохраняется на стороне сервера. Вам следует проверить, что они вошли в систему и что они существуют / могут войти (в случае удалений / запретов).

Когда вы проверяете, что они существуют / могут войти, вы можете извлечь другую информацию из базы данных, такую ​​как name, nr и так далее. Все, что вам действительно нужно, это ключ с именем 'logged_in_user' или что-то, что хранит идентификатор вошедшего в систему пользователя. Как сказал Алекс Амирян, cookie можно скопировать, поэтому вы можете также сохранить IP-адрес последнего доступного представления в сеансе, чтобы попытаться обеспечить безопасность.

0 голосов
/ 29 марта 2012

Всегда используйте маркер безопасности для регистрации пользователей.Этот токен безопасности можно сгенерировать с помощью crypt().После входа пользователей периодически меняйте маркер безопасности, пока они не выйдут из системы.Также сохраните на сервере резервную копию всех переменных сеанса, включая токен безопасности (в базе данных).Это также поможет вам отслеживать историю входа пользователя.

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

...