我在我的php应用程序中使用bcrypt进行密码哈希。 但是,仍然可以在数据库中使用 bcrypt 或在 php 代码中使用 bcrypt 之间进行选择。 虽然我相信使用 bcrypt 比大多数其他哈希选项更好,但通过数据库中的函数或通过 php 中的函数使用 bcrypt 更安全吗?
我会选择第二个选项并计算PHP代码中的BCrypt哈希。
如果将密码放在 SQL 语句中,则可能会泄漏其他可能性。首先,必须使与数据库的连接安全,然后它最终可能会出现在日志文件中。
如果将哈希放在 SQL 语句中,则只需关心安全传输到应用程序,其余的将是安全的,因为只有哈希可以泄漏。作为奖励,您不必关心SQL注入和编码/转义问题。另一个优点是,您独立于数据库系统,也可以支持没有 BCrypt 实现的数据库(大多数数据库不提供 BCrypt 函数,或者仅通过安装扩展)。
我个人认为这可以是任何一种方式:
如果您说原始密码可以在进入数据库的途中进行嗅探,那么哈希也是如此。唯一增加的安全性是通过默默无闻的安全性。他们不知道你正在使用什么哈希算法,当他们发现时,哈希值可能会随着时间的推移而被破解。
问题是人们可以嗅探从PHP到数据库的数据,而不是原始密码正在发送。如果对数据库使用 SSL,则应该没有问题。(除非你的数据库记录了已经发送的查询,否则如果你的数据库记录了查询,那么你应该用PHP进行哈希处理)
数据库散列的一个好处是它更快。