我在这里处理遗留代码。 这是一个带有用户名/密码输入的HTML表单 然后将表单发送到服务器(使用SSL),并将密码与数据库值进行比较。
问题:有没有办法在密码发送到服务器时隐藏"(加密)?
即使我在数据库中存储哈希密码和唯一用户盐,
用户发送密码时存在风险。
专业人士如何做到这一点?
**编辑: 我计划将密码存储为散列,并使用独特的盐。
如果有人获取密码(如果SSL被泄露)这是否意味着黑客可以毫无问题地获得访问权限?
答案 0 :(得分:2)
在常规用户名/密码登录中,密码始终发送到服务器。理想情况下,服务器然后散列密码输入并与存储在数据库中的散列进行比较 - 为每个密码使用唯一的salt。就像@Sneftel说的那样,当你使用SSL时,密码不会以明文形式发送。
想一想;如果只将密码 hash 发送到服务器,并且服务器将其与数据库中的散列进行比较 - 那么与仅以明文形式存储数据库中的密码有何不同?任何攻击者都可以获得哈希以便进入系统。
这里的安全问题是密码本身以明文形式存储在您的数据库中 - 这不是一个好主意。这里有一些提示:http://alias.io/2010/01/store-passwords-safely-with-php-and-mysql/
答案 1 :(得分:0)
您可以在客户端使用一些javascript程序来加密密码。但这需要用户执行该脚本,这可能是一个问题:
因此,在发送到服务器时隐藏密码并不容易。
无论如何,您提到使用SSL加密连接发送数据。对于这种情况,这是通常的(通常是安全的)方法。缺点是,如果您的SSL实现存在缺陷(例如Heartbleed错误),您的密码通常会被破坏,除非您不使用服务器密钥加密连接数据(这称为Perfect Forward Secrecy)。
关于您的数据库,您绝不应该在其中存储纯文本密码,除非您被要求这样做而不能更改该要求。你总是应该存储盐渍密码哈希值。