2015-03-30 6 views
0

У меня есть веб-приложение на основе PHP, которое отправляет HTTP-запросы в веб-службу Java, которая, в свою очередь, выполняет действия, запрошенные в базе данных Oracle. Я хочу использовать password_hash для хеширования моего пароля перед отправкой в ​​HTTP-запрос. Если я делаю это при создании нового пользователя, проблем там нет. Однако, когда мне нужно войти с использованием этого пароля, я не могу проверить его на PHP, потому что я не могу (и не могу) иметь прямой доступ к базе данных, чтобы получить хэш, хранящийся там. Таким образом, проверка должна быть в веб-службе Java. Возможно ли это, а если нет, какова альтернатива? Используемая соль будет случайной, поэтому я не могу использовать пароль для входа в систему и отправить его, потому что у меня нет соли, используемой для хэша, хранящегося в базе данных.Использование Java для проверки пароля Hashed с использованием password_hash в PHP

+0

поэтому в производстве у вас есть один сервер с php, а другой сервер где-то еще с веб-службой Java и базой данных, не так ли? – gia

+0

Скорее всего, да (хотя они могут быть на одном сервере). Параметр «не может иметь прямой доступ к db в PHP» является обязательным требованием по соображениям безопасности. Мы не можем иметь информацию о подключении db или инструкции в PHP-коде. – RMK

+0

Каждая соль будет случайной для каждого пользователя, но для подтверждения входа в систему соль должна храниться в db с паролем ''. Когда пользователь пытается войти в систему, имя пользователя можно использовать для извлечения соли из базы данных. Для аутентификации между веб-службами и PHP-приложением потребуется несколько сообщений. http://security.stackexchange.com/questions/33505/why-using-random-salts http://security.stackexchange.com/questions/16325/hashed-password-storage-with-random-salt – Ian2thedv

ответ

0

Разместить логин как услугу в веб-службе, добавить проверку на функцию входа в систему, так что только сервер PHP может получить к ней доступ (я предполагаю, что вся услуга может быть доступна только серверу PHP в любом случае, поэтому у вас есть сервер PHP разделен в первую очередь). Вход должен быть обновлен (ping) каждый раз, пока сеанс остается открытым, все операции над сервисом будут проверять этот сеанс, чтобы он был активным, иметь java-агент, закрывающий незанятые соединения, если веб-служба работает только при нажатии /От себя.

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

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

Что касается хэшей и солей, они используются для защиты зашифрованных данных в базе данных от кражи и чтения. (в простейшей форме, чтобы защитить номера кредитных карт). Соль может быть общедоступной, хеш технически тоже, но вам придется защищать ее с помощью SSL как минимум, чтобы никто не мог войти в систему, используя его (или простой пароль, если ваш пользователь отправляет это сообщение): P. plain password> hash, затем добавьте соль> соль и результат, сохраненные в базе данных.

В случае, если PHP ретранслирует данные для входа в систему, тогда PHP может удерживать свою сторону сеанса, поскольку он знает идентификатор пользователя с помощью агента cookie + browser + ip (по-прежнему необходимо открыть сеанс с помощью службы). В случае, если пользователь подключается к веб-службе напрямую, PHP должен запрашивать эту информацию в веб-службе (если это возможно, агент ip + браузера) или запрашивать токен сеанса (строку, сгенерированную службой), которая должна быть предоставлена пользователь, если он хочет получить доступ к любой странице на сервере PHP в течение всего токена.

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

  • Нет связанных вопросов^_^