使用 '==' 或 '===' 与 'strcmp()' 进行字符串比较

新手上路,请多包涵

似乎 PHP 的 === 运算符区分大小写。那么有没有理由使用 strcmp()

执行以下操作是否安全?

 if ($password === $password2) { ... }

原文由 Jiew Meng 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 599
2 个回答

之所以使用它是因为 strcmp

如果 str1 小于 str2,则返回 < 0; > 0 如果 str1 大于 str2,如果它们相等则为 0。

=== 只返回 truefalse ,它不会告诉你哪个是“更大”的字符串。

原文由 deceze 发布,翻译遵循 CC BY-SA 4.0 许可协议

if ($password === $password2) { ... } 在比较其中一个输入由用户控制的密码或密码哈希时,这不是一件安全的事情。

在这种情况下,它会创建一个定时预言机,允许攻击者从执行时间差异中得出实际的密码哈希。

使用 if (hash_equals($password, $password2)) { ... } 代替,因为 hash_equals 执行“定时攻击安全字符串比较”。

原文由 Oktokolo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏