比较两个字符串是否相等

By on

有时候, 当用户传入一个字符串时, 你可能会需要拿着这个字符串和最终结果相对比, 如果我们使用 == 号来比较两个字符串, 可能会产生时序攻击.

'abcdef' == $req->code

也就是说, == 号在判断两个字符串相等时, 会一位一位的判断, 如果遇到哪一位不一样, 就返回错误, 这样根据服务器运算速度, 就可以一位一位的猜出最终的结果.

php 官方提供了避免时序攻击的字符串比较函数, 就是 hash_equals 无论两个字符串是否相等, 本函数的时间消耗是恒定的.

文档如下: https://www.php.net/manual/zh/function.hash-equals.php