【发布时间】:2015-06-03 05:38:28
【问题描述】:
我有一个基于 PHP 的 Web 应用程序,它将 HTTP 请求发送到 Java Web 服务,Java Web 服务反过来执行 Oracle 数据库中请求的操作。我想在 HTTP 请求中发送密码之前使用 password_hash 对我的密码进行哈希处理。如果我在创建新用户时这样做,那没有问题。但是,当我需要使用此密码登录时,我无法在 PHP 中验证它,因为我没有(也不能)直接访问数据库以获取存储在那里的哈希值。所以验证必须在 Java Web 服务中。那有可能吗?如果没有,还有什么选择?使用的盐是随机的,所以我不能散列用于登录的密码并发送它,因为我没有用于存储在数据库中的散列的盐。
【问题讨论】:
-
所以在生产中你有一台带有 php 的服务器,另一台带有 java web 服务和数据库的服务器,对吧?
-
很可能是的(尽管它们可以在同一台服务器上)。出于安全原因,“无法直接访问 PHP 中的数据库”部分是必需的。我们不能在 PHP 代码中包含数据库连接信息或语句。
-
每个用户的每个盐都是随机的,但是为了验证登录,盐需要使用密码
<random-salt><hashed-password>存储在数据库中。当我用户尝试登录时,用户名可用于从数据库中检索盐。 Web 服务和 PHP 应用程序之间的身份验证需要多条消息。 security.stackexchange.com/questions/33505/…security.stackexchange.com/questions/16325/… -
你能不能不使用 HTTPS 连接到 Java 服务,而只是转发用户名/密码,就像 PHP 脚本从用户那里收到它们一样...它们仍然是 SSL(嗯,TLS)加密它们在用户机器和 PHP 服务器之间的方式非常相似。
标签: java php hash password-hash php-password-hash