xda*_*azz 37

md5('240610708')的结果是 0e462097431906509019562988736854.

md5('QNKCDZO')的结果是0e830400451993494058024219903391.

它们都是浮点数格式字符串(数字字符串),如果==在php中使用,当将数字与字符串进行比较或比较涉及数字字符串时,则每个字符串都将转换为数字,并以数字方式执行比较.

两个字符串在转换0时都会转换为==,如果要将它们作为字符串进行比较,请记住使用===(严格比较).

请参阅:PHP表示两个不同的字符串是相同的

  • 在很多情况下,哈希也应该在恒定时间内进行比较(特别是在MAC的上下文中,以验证密文).所以== bug并不重要,因为你永远不应该使用==进行安全敏感的哈希比较. (5认同)
  • 有一篇关于此安全漏洞的好文章,它还解释了如何通过使用数组绕过strcmp:https://marcosvalle.github.io/ctf/php/2016/05/12/php-comparison-vlun.html (2认同)

eli*_*ide 11

您需要使用类型敏感的比较运算符===.

哈希分别评估0e4620974319065090195629887368540e830400451993494058024219903391.当你使用时==,由于e(科学记法),每个都被转换为数字表示,因此它们各自成为0.0 == 0是真的.

另一方面,这个:

md5('240610708') === md5('QNKCDZO')
Run Code Online (Sandbox Code Playgroud)

返回,false因为字符串值不同.===强制类型敏感的比较.