我想允许在密码中使用特殊字符,但我想知道:使用$_POST
中未触及的密码然后将其哈希存储在数据库中是否安全?
喜欢这个:
password_hash($_POST['password'], PASSWORD_BCRYPT)
和
password_verify($_POST['password'], $hashFromDatabase)
用户名是否会被验证为字母数字,并且都通过PDO存储在数据库中?
答案 0 :(得分:3)
是和否。虽然您对特殊字符没有任何问题,但您可以使用长度。根据{{3}}:
注意
使用PASSWORD_BCRYPT作为algo参数,将导致 密码参数被截断为最大长度72 字符。
现在截断的密码将始终匹配,但是由于超过72个字符的密码被截断,您可能会给用户一种错误的安全感。
查看manual。
虽然有点假设的情况......
答案 1 :(得分:0)
是的,将$_POST['password']
变量直接用作password_hash()
函数的输入是安全的,因为BCrypt甚至适用于二进制输入。函数的输出是一个哈希字符串,它不能包含任何"有害的"有关SQL注入的字符。