Gum*_*tic 9 php database security
我正在构建一个拥有用户的网站,并且与大多数拥有某些用户类型系统的网站一样,他们使用他们的电子邮件和密码登录.我正在使用PHP作为我网站的后端部分.
在阅读了互联网上的一些文章和帖子后,我了解了PHP函数password_hash()和password_verify(),并想知道这样的示例程序是否足够安全?
所以我对此的问题如下:
任何答案都将非常感激.谢谢.
这两个问题都是肯定的,有几点需要注意:
Bcrypt在72个字符后截断.虽然这并没有以任何实际方式降低安全性,但它仍然在某些人的口中留下了不好的味道.人们通常会通过这样的哈希函数来解决这个问题(请阅读第二个警告!):
password_hash(hash('sha512', $_POST['password'], true), PASSWORD_DEFAULT);
password_verify(hash('sha512', $_POST['password'], true), $storedHash);
Run Code Online (Sandbox Code Playgroud)Bcrypt在NUL字节上中断,这意味着如果密码的SHA512哈希开头00,攻击者破解哈希将把它看作空字符串的bcrypt哈希.
如果要接受超过72个字符的密码而不进行静默截断,请执行我们在password_lock中所做的操作:base-64在散列和验证期间对原始散列输出进行编码.
(password_lock执行的密码哈希的经过身份验证的加密是可选的,只有当您的数据库与Web服务器位于不同的硬件上时,才会提高安全性.)
但是,如果您只是接受用户的密码,那么bcrypt就可以了.无论如何,大多数人的72个字符密码都是牢不可破的.