Php сессии безопасный вход - PullRequest
3 голосов
/ 23 апреля 2010

Мой вопрос касается создания безопасного входа в рутину. После сравнения имени пользователя и пароля с сохраненными значениями я установил переменную сеанса с именем logged в значение true. Затем, когда пользователь просматривает веб-страницу, я просто проверяю зарегистрированную переменную на true или false, чтобы определить, должен ли пользователь иметь доступ.

Я впервые создаю что-то подобное. Это безопасно? Я чувствую, что есть что-то еще, что я должен сделать, чтобы убедиться, что пользователи действительны.

Ответы [ 4 ]

1 голос
/ 23 апреля 2010

Если вы не обрабатываете какую-либо конфиденциальную информацию и просто пытаетесь предоставить личный опыт пользователя, то то, что вы делаете, это хорошо.Однако, если вы действительно беспокоитесь о безопасности, вы можете воспользоваться несколькими другими подходами.Первый - создать таблицу базы данных с именем «user_tokens» или что-то подобное.Когда пользователь входит в систему, создайте случайный ключ и сохраните его IP-адрес в таблице, связанной с этим ключом.Кроме того, сохраните этот ключ в файле cookie на компьютере клиента.Каждый раз, когда они пытаются сделать что-то деликатное, вы можете сравнить их IP-адрес и ключ куки с базой данных.

Немного изучите межсайтовый скриптинг (XSS) и перехват сеанса.Метод, который я описал выше, действительно сократит это.

1 голос
/ 23 апреля 2010

Конечно, это безопасно, но есть меры предосторожности, которые вы должны предпринять, чтобы предотвратить небезопасные обстоятельства / атаки.

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

В ответ на жалобу вот некоторые проблемы, которые OWASP поднимает об аутентификации / сеансах.

1. Всегда ли учетные данные защищены при хранении с использованием хеширования или шифрования?.

Да, храните пароли своих пользователей в виде соленых хэшей.

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

Нет, эти функции должны быть защищены секретным вопросом / ссылкой на электронную почту.

3. Отображаются ли идентификаторы сеанса в URL (например, перезапись URL)?

Нет, их не должно быть.

4. Являются ли идентификаторы сеансов уязвимыми для атак фиксации сеансов?

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

5. Превышено ли время ожидания идентификаторов сеансов и могут ли пользователи выходить из системы?

В тех случаях, когда пользователь не указал иное «оставаться в системе в течение двух недель», срок действия сессий должен скоро закончиться.

6. Поворачиваются ли идентификаторы сеанса после успешного входа в систему?

Да, использование session_destroy() и session_start() позволит это сделать.

7. Пароли, идентификаторы сеансов и другие учетные данные отправляются только по соединениям TLS?

Конечно.

В конечном счете, вы должны учитывать тип данных, которые вы будете обрабатывать. Никогда не позволяйте кому-либо получить доступ к паролю пользователя, так как это может скомпрометировать его данные в другом месте. Но, если вы пользуетесь colorakitten.com, не теряйте сон из-за возможности угона сессий: «О нет, кто-то взломал мой аккаунт и обесцветил моих котят».

Чтение: Безопасность сеанса PHP

1 голос
/ 23 апреля 2010

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

0 голосов
/ 23 апреля 2010

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

...