запрос безопасности php сессий - PullRequest
4 голосов
/ 01 мая 2011

Спасибо за ваши ответы. Я обновил свой код сеанса PHP.

Я избавился от проверки пользовательского агента, поскольку @Rook показал мне недостатки в логике.

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

Еще раз спасибо за вашу помощь, ребята, daza166

Ответы [ 3 ]

6 голосов
/ 01 мая 2011

Ничто из того, что вы делаете, не улучшает силы сеанса.Вы должны четко понимать, от какой атаки вы защищаетесь, потому что ваши проверки не предотвращают атаки.Хорошим примером является проверка пользовательского агента, который легко подделать.Свертывание идентификатора сеанса не помогает, если пропущено хотя бы одно значение или у вас есть уязвимость XSS / CSRF, тогда злоумышленник может контролировать сеанс.

Чтение OWASP А3-сломанная аутентификация и управление сеансом.Также читайте о OWASP A5-CSRF , который иногда называют "сессионной ездой".

Вы должны использовать этот код в заголовочном файле php:

ini_set('session.cookie_secure',1);
ini_set('session.cookie_httponly',1);
ini_set('session.use_only_cookies',1);
session_start();

Этот код предотвращает фиксацию сеанса .Это также помогает защитить от xss от доступа document.cookie, что является одним из способов Session Hijacking .Обеспечение использования только HTTPS-файлов cookie - это хороший способ решения проблемы недостаточной защиты транспортного уровня * OWASP A9 .Этот способ использования HTTPS иногда называют «безопасными файлами cookie», что является ужасным названием для него.Также STS - очень полезная функция безопасности, но не все браузеры ее поддерживают (пока).

4 голосов
/ 01 мая 2011

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

Нет.Сеанс управляется на стороне сервера, и клиент получает идентификатор сеанса только для идентификации.Закрытие браузера приведет к уничтожению только файлов cookie сеанса (то есть файлов cookie, которые действительны только во время текущего сеанса браузера), которые содержат идентификаторы сеанса, но не связанные с ним сеансы.Если тот же сеанс используется после повторного открытия браузера, файл cookie сеанса, вероятно, является не настоящим файлом cookie сеанса, а постоянным файлом cookie .Вы можете настроить эту настройку session.cookie_lifetime до 0.

Лучше ли держать пользователя вошедшим в систему (например, login.php - введитеподробнее один раз -> начать сеанс), а не требовать, чтобы пользователь продолжал входить в систему, как упоминалось, если в моих сценариях возникает ошибка или если определенные страницы обращаются к пользователю, я уничтожаю сеанс (т. е. выход из системы)?

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

2 голосов
/ 01 мая 2011

Мне кажется, это разумный вопрос:)

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

Вы можете использовать session_set_cookie_params , чтобы установить время жизни файла cookie идентификатора сеанса.Это должно быть то, что вам нужно для # 1

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...