在数据库或 php 代码中使用 bcrypt 对密码进行哈希处理


Hash passwords with bcrypt in the database or in php code?

我在我的php应用程序中使用bcrypt进行密码哈希。 但是,仍然可以在数据库中使用 bcrypt 或在 php 代码中使用 bcrypt 之间进行选择。 虽然我相信使用 bcrypt 比大多数其他哈希选项更好,但通过数据库中的函数或通过 php 中的函数使用 bcrypt 更安全吗?

我会选择第二个选项并计算PHP代码中的BCrypt哈希。

如果将密码放在 SQL 语句中,则可能会泄漏其他可能性。首先,必须使与数据库的连接安全,然后它最终可能会出现在日志文件中。

如果将哈希放在 SQL 语句中,则只需关心安全传输到应用程序,其余的将是安全的,因为只有哈希可以泄漏。作为奖励,您不必关心SQL注入和编码/转义问题。另一个优点是,您独立于数据库系统,也可以支持没有 BCrypt 实现的数据库(大多数数据库不提供 BCrypt 函数,或者仅通过安装扩展)。

我个人认为这可以是任何一种方式:

如果您说原始密码可以在进入数据库的途中进行嗅探,那么哈希也是如此。唯一增加的安全性是通过默默无闻的安全性。他们不知道你正在使用什么哈希算法,当他们发现时,哈希值可能会随着时间的推移而被破解。

问题是人们可以嗅探从PHP到数据库的数据,而不是原始密码正在发送。如果对数据库使用 SSL,则应该没有问题。(除非你的数据库记录了已经发送的查询,否则如果你的数据库记录了查询,那么你应该用PHP进行哈希处理)

数据库散列的一个好处是它更快。