发布纯文本密码,还有其他选择

时间:2014-06-09 09:26:21

标签: php ssl

我在这里处理遗留代码。 这是一个带有用户名/密码输入的HTML表单 然后将表单发送到服务器(使用SSL),并将密码与数据库值进行比较。

问题:有没有办法在密码发送到服务器时隐藏"(加密)?

即使我在数据库中存储哈希密码和唯一用户盐,
用户发送密码时存在风险。

专业人士如何做到这一点?

**编辑: 我计划将密码存储为散列,并使用独特的盐。

如果有人获取密码(如果SSL被泄露)这是否意味着黑客可以毫无问题地获得访问权限?

2 个答案:

答案 0 :(得分:2)

在常规用户名/密码登录中,密码始终发送到服务器。理想情况下,服务器然后散列密码输入并与存储在数据库中的散列进行比较 - 为每个密码使用唯一的salt。就像@Sneftel说的那样,当你使用SSL时,密码不会以明文形式发送。

想一想;如果只将密码 hash 发送到服务器,并且服务器将其与数据库中的散列进行比较 - 那么与仅以明文形式存储数据库中的密码有何不同?任何攻击者都可以获得哈希以便进入系统。

这里的安全问题是密码本身以明文形式存储在您的数据库中 - 这不是一个好主意。这里有一些提示:http://alias.io/2010/01/store-passwords-safely-with-php-and-mysql/

答案 1 :(得分:0)

您可以在客户端使用一些javascript程序来加密密码。但这需要用户执行该脚本,这可能是一个问题:

  • 有些用户无法执行该脚本,因为他们使用不支持javascript的程序访问您的页面。一个示例可以是一个程序,用于加载页面并从中获取一些特定的值。
  • 有些用户不想执行该脚本。

因此,在发送到服务器时隐藏密码并不容易。

无论如何,您提到使用SSL加密连接发送数据。对于这种情况,这是通常的(通常是安全的)方法。缺点是,如果您的SSL实现存在缺陷(例如Heartbleed错误),您的密码通常会被破坏,除非您不使用服务器密钥加密连接数据(这称为Perfect Forward Secrecy)。

关于您的数据库,您绝不应该在其中存储纯文本密码,除非您被要求这样做而不能更改该要求。你总是应该存储盐渍密码哈希值。