如何清理接收哈希+随机盐的字符串?
我可以删除空格,检查长度并使用mysqli_real_escape_string,但它足够了吗? filter_var非常有用,但在这种情况下它无能为力,对吗?
答案 0 :(得分:3)
如果要将变量放入SQL查询中,则需要调用mysqli_read_escape_string
或(甚至更好!)使用prepared statements。
您需要进行其他清理工作。但是,如果该值将来自自由形式的用户输入(例如文本框而不是下拉菜单),那么您可能还需要修剪空白并将其小写为对用户的礼貌(以纠正他们可能犯的意外错误) 。这实际上取决于应用程序。
答案 1 :(得分:1)
为了清楚起见,你从一个不受信任的来源收到一个哈希(有效的随机数据)+盐(实际上是随机数据),你想要“消毒”它吗?可能存在适用的健全性定义(像base64编码这样的数据格式,最大/预期长度),但我强烈怀疑某处存在功能性安全性错误。
最值得注意的是,为什么您接受来自不受信任来源的哈希+盐,而不是接受密码并在您信任的环境中进行转换?从不受信任的来源接受散列+盐可能会将它们变成纯文本等价物(你失去了从散列和盐化原始密码中获得的好处)。
答案 2 :(得分:0)
首先验证密码是否符合您给定的验证规则。您可以使用正则表达式。密码通常可以是a-z,0-9,也许是一些标点符号,并且必须在一定长度内 - 比如6-12个字符。使用preg_match()
验证字符串的内容和长度。像preg_match('/^[a-z0-9]{6,12}$/i',$pass)
之类的东西可能是一个开始。
接下来,您可以哈希密码。您可以使用函数crypt()
来执行此操作。这将创建一个单向加密字符串,您可以使用该字符串在用户尝试进行身份验证时进行比较。
最后,为了存储密码,使用mysqli_real_escape_string()
是的,可以准备好在SQL插入或更新语句中使用。