bcrypt和消毒密码?

时间:2014-12-28 17:19:13

标签: php hash passwords sanitize

我想允许在密码中使用特殊字符,但我想知道:使用$_POST中未触及的密码然后将其哈希存储在数据库中是否安全?

喜欢这个:

password_hash($_POST['password'], PASSWORD_BCRYPT)

password_verify($_POST['password'], $hashFromDatabase)

用户名是否会被验证为字母数字,并且都通过PDO存储在数据库中?

2 个答案:

答案 0 :(得分:3)

是和否。虽然您对特殊字符没有任何问题,但您可以使用长度。根据{{​​3}}:

  

注意

     

使用PASSWORD_BCRYPT作为algo参数,将导致   密码参数被截断为最大长度72   字符。

现在截断的密码将始终匹配,但是由于超过72个字符的密码被截断,您可能会给用户一种错误的安全感。

查看manual

虽然有点假设的情况......

答案 1 :(得分:0)

是的,将$_POST['password']变量直接用作password_hash()函数的输入是安全的,因为BCrypt甚至适用于二进制输入。函数的输出是一个哈希字符串,它不能包含任何"有害的"有关SQL注入的字符。