清理用户密码
在开发安全应用程序时,开发人员通常会考虑在加密存储用户提供的密码之前先清理用户密码。然而,在散列之前对密码应用清理机制会带来一定的复杂性。
避免在散列之前清理密码
避免使用 escape_string( 等函数来清理密码是至关重要的)、htmlspecialchars() 或addslashes()。这样做的主要原因是这样的预处理是多余且不必要的。
PHP 的 password_hash() 函数生成的哈希值(通常用于密码存储)不会构成 SQL 注入威胁。哈希过程将密码转换为无法被 SQL 注入利用的哈希。
哈希无需清理即可提供安全性
哈希函数不会为特定字符分配特殊含义;因此,出于安全目的,不需要进行清洁。通过允许用户指定他们想要的任何密码(包括空格和特殊字符),哈希可以确保密码的安全性,无论其内容如何。
存储注意事项
虽然默认值哈希方法(PASSWORD_BCRYPT)生成60个字符宽的哈希,建议分配更多空间用于存储,例如VARCHAR(255) 或 TEXT,以适应哈希算法未来可能发生的变化。
清洁无效的示例
考虑密码“我是”甜点配料“&!”。应用各种清理方法会产生不同的结果:
但是,这些转换对哈希密码的安全性没有影响。仅当对提供的密码和从数据库检索到的哈希等效值应用相同的清理方法时,password_verify() 才会成功。
结论
总之,避免在使用password_hash()进行散列之前清理密码。这样做是不必要的并且会带来复杂性。相反,依靠哈希算法提供的安全性并考虑其潜在的存储需求。
以上是我应该在散列用户密码之前清理它们吗?的详细内容。更多信息请关注PHP中文网其他相关文章!