【问题标题】:bcrypt and sanitizing password?bcrypt和消毒密码?
【发布时间】:2023-03-06 14:08:01
【问题描述】:

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

像这样:

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

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

用户名将被验证为字母数字,并通过 PDO 存储在数据库中?

【问题讨论】:

  • 所有散列函数都是二进制安全的。
  • 我以为没问题,但是如果有安全问题我找不到任何地方。

标签: php hash passwords sanitize


【解决方案1】:

是和不是。尽管特殊字符不会有任何问题,但长度可以。根据manual

注意

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

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

查看simple example here

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

【讨论】:

  • 很高兴知道。谢谢
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-19
    • 2016-10-20
    • 1970-01-01
    • 2019-01-09
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多