2010-01-08 4 views
0

Короче говоря, я разрабатываю собственный механизм отчетов. Он полностью основан на Интернете (использует PHP и различные методы AJAX) и интерпретирует данные, хранящиеся в базе данных MySQL, нашим производственным программным обеспечением. Он работает на сервере Ubuntu 8.04, и все сотрудники имеют учетную запись пользователя Linux на этой машине. Я установил систему входа в систему, используя pam_auth, которая заставляет пользователя регистрироваться со своей учетной записью пользователя linux и определяет, принадлежат ли они к соответствующей группе для доступа к определенным отчетам.PHP pam_auth и cookies

Эта часть отлично работает, моя проблема здесь заключается в добавлении функции «запомнить меня» с помощью файлов cookie. Я хотел бы, чтобы пользователи имели 30-дневный файл cookie, чтобы сохранить их некоторое время и усугубить необходимость входа в систему каждый раз, когда истекает их сеанс. Я написал часть кода «помню меня», и он хранит файл cookie. Я сохраняю только их имя пользователя и хэш-код md5 их пароля. Проблема здесь возникает, когда пришло время повторно аутентифицировать их. Обычно я просто делаю это, сравнивая сохраненное имя пользователя с хэшем пароля этого пользователя из базы данных. Что усложняет ситуацию, так это то, что у меня нет прямого доступа к именам пользователей и паролям. Все они хранятся в/etc/passwd и/etc/shadow, а логины обрабатываются модулем PAM. pam_auth ожидает простого текстового имени пользователя и пароля обычного текста.

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

Есть ли здесь лучшие решения?

ответ

0

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

Вы можете установить длину сеанса PHP как минимум на 30 дней, изменив эти два параметра ini: «session.cookie_lifetime» и «session.gc_maxlifetime». Затем, как только пользователь зарегистрировался, вы можете сохранить свое имя пользователя и когда они вошли в супер глобальный массив $ _SESSION после вызова session_start(). Когда пользователь возвращается, вы можете проверить значения в массиве $ _SESSION, чтобы узнать, вошли ли они в систему и не было ли это менее 30 дней назад.

Теперь, если вам по-прежнему нужна аутентификация PAM, по другим причинам вам придется хранить свой пароль в переменной сеанса либо как чистый текст, либо с возможностью обратного шифрования. Хотя это не идеально, он более безопасен, чем как cookie в браузере пользователя. Для получения дополнительной информации см. PHP Session - Manual.

+0

Возникли ли какие-либо возможные проблемы, связанные с установлением времени жизни сеанса на 2592000 (30 дней)? – DWilliams

+0

Я ничего не знаю, и я не думаю, что в документации есть какие-либо заметки, но я никогда не пробовал работать с PHP-сессией. – jlamp