2013-05-24 4 views
2

Я всегда установить несколько ВАР на массиве $ _SESSION для управления доступом на моих сайтах, но я хотел бы знать, если это безопасное решение или там будет что-то лучше, чем:

($_SESSION['admin'] == 1) ? take_control_of_my_site : get_back; 
+0

Спасибо. Я проверю другое имя. –

+0

Это действительно зависит от того, как в первую очередь устанавливается $ _SESSION ['admin'], и если вы используете SSL. В Интернете так много ресурсов, и даже много других вопросов, которые отвечают на это очень подробно. –

+1

@nathanhayfield, как бы имя переменной сделало ее более или менее безопасной? – PeeHaa

ответ

4

данные сеанса поддерживается на на стороне сервера. Вы можете полагаться на данные, пока

  • Ваш сервер защищен
  • Вы тщательно проверить все данные, которые вы размещаете в сессии.
+0

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

+0

@BenjaminGruenbaum См. Мой (слегка) пересмотренный ответ. Хотя верно, что идентификатор доступен пользователю, данных нет. Ответственность разработчиков заключается в обеспечении того, чтобы он полагался на данные, а не на идентификатор. –

+0

Ну, если у сайта будет экран входа в систему, я всегда делаю HTTPS, и я проверяю эти данные на базе базы данных, поэтому я думаю, что я это рассмотрел. Реальный вопрос: может ли кто-нибудь изменить var $ _SESSION любым способом с клиентской стороны? Я думаю, что это невозможно. –

2

Сессия в безопасности. Даже имя переменной сеанса безопасно, и выбор другого имени не повышает безопасность.

Проблема в PHP - это механизм сеанса. Он использует файлы по умолчанию, которые могут значительно замедлить работу вашего сайта и масштабироваться очень плохо, и потенциально могут быть небезопасными, следовательно, патч suoshin php.

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

+0

Если у пароля есть сеансы файловой системы, они также имеют доступ к исходному коду вашего сайта, который дает им базу данных и все остальное. – Incognito

+0

Не обязательно. Существуют методы хранения учетных данных базы данных вне исходного кода (переменные apache ENV). Вы также можете использовать строгую собственность на файлы исходного кода и сохранять файлы сеанса и исходный код отдельно (обычно это по умолчанию). Наконец, используя suoshin, файлы сеансов больше не являются обычным текстом и зашифрованы. Однако они медленны. – beiller

1

Сессии по своей сути небезопасны. Существуют риски, но они могут быть смягчены.

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

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

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

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

Смежные вопросы