Храните учетные данные для входа на сервер через PHP (безопасно и надежно) - PullRequest
1 голос
/ 09 июня 2009

Итак, я пытаюсь написать php SOAP-клиент, который требует, чтобы пользователь передал свои учетные данные для входа на удаленный SOAP-сервер. Вот установка / дилемма:

  • Пользователь заходит на локальный сайт с использованием локальных учетных данных и переходит на страницу с SOAP-клиентом.
  • Теперь пользователю предлагается ввести учетные данные для удаленного сервера Soap, которые, кстати, такие же, как те, которые используются для входа на локальный сайт (9 раз из 10) через форму POST.
  • Клиент передает учетные данные в заголовке SOAP вместе с запросом SOAP, клиент выводит ответ сервера SOAP.
  • Сценарий заканчивается, пользователь видит выходные данные.

Теперь пользователю нужны некоторые другие данные, относящиеся к исходному выводу. Проблема в том, что переменная $ _POST теперь давно исчезла. Пользователь должен включить учетные данные вместе со следующим запросом. Повторяйте до тех пор, пока пользователь не решит, что проще искать данные другим способом, и не разочаруется в классном SOAP-клиенте.

К серверу, на котором размещена веб-служба, можно получить прямой доступ через веб-клиент, а аутентификация поддерживается с помощью файла cookie. Однако, когда сервер запрашивается через WDSL, он не ищет куки или другой сеанс на стороне браузера; он просто проверяет, содержит ли SOAP-запрос учетные данные в заголовке.

Итак, есть две версии этого вопроса:

1) Есть ли способ, чтобы учетные данные локального сеанса передавались в SOAP-запрос, таким образом сохраняя логины до одного? (Имейте в виду, что я не контролирую метод аутентификации даже на локальной стороне. Он управляется собственным модом Apache, который контролирует аутентификацию для любого и каждого пользователя в системе, охватывая десятки отделов, над которыми у меня нет юрисдикции. Я просмотрел глобальные переменные и не обнаружил никаких намеков на учетные данные, но я мог бы просто подумать о некоторых базовых функциях безопасности PHP / Apache).

2) Существует ли безопасный и надежный способ для PHP обрабатывать учетные данные после вторичного входа в систему, чтобы эти учетные данные могли использоваться в течение некоторого установленного промежутка времени (скажем, 30-минутный сеанс?). Имейте в виду, что, основываясь на первом пункте, эти учетные данные являются очень конфиденциальными, поэтому не должно быть простого способа, чтобы кто-то копался в них и выводил эти учетные данные (или входил в какую-либо БД, чтобы увидеть их и т. Д.)

Извините, если это звучит параноидально. Я не привык обрабатывать учетные данные безопасности, кроме простого: «Здесь вы вводите свой пароль ... Хорошо, теперь, когда все знают друг друга до конца сессии, я могу вернуться к выводу полезных вещей».

Даже ссылка на какие-либо базовые функции безопасности будет полезным началом.

Ответы [ 2 ]

4 голосов
/ 09 июня 2009

Создайте свой собственный сеанс истечения срока действия. Создайте таблицу базы данных, которая будет:

CREATE TABLE session (
    ID int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
    Hash binary(16) NOT NULL,
    User int unsigned NOT NULL,
    Created timestamp 
);

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

Последующие звонки не требуют имени пользователя и пароля, только хэш. После, скажем, 5 минут бездействия хэш удаляется. Имя пользователя и пароль передаются только один раз, после чего хеш используется как аутентификация и истекает после периода неиспользования.

0 голосов
/ 09 июня 2009

Почему бы вам самим не установить cookie-файл, в котором после первого запроса на мыло есть имя пользователя / пароль? Вы спрашиваете только один раз, а затем сохраните в печенье. Затем вы можете установить тайм-аут и запросить его, когда пользователь вошел в систему. Возможно, вы захотите удалить куки при выходе.

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

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