我刚刚在 Zend 框架的 HTTP Auth 库中遇到了这段代码。它似乎使用了一个特殊的字符串比较函数来使其更安全。但是,我不太明白评论。谁能解释为什么这个功能比做更安全$a == $b
?
/**
* Securely compare two strings for equality while avoided C level memcmp()
* optimisations capable of leaking timing information useful to an attacker
* attempting to iteratively guess the unknown string (e.g. password) being
* compared against.
*
* @param string $a
* @param string $b
* @return bool
*/
protected function _secureStringCompare($a, $b)
{
if (strlen($a) !== strlen($b)) {
return false;
}
$result = 0;
for ($i = 0; $i < strlen($a); $i++) {
$result |= ord($a[$i]) ^ ord($b[$i]);
}
return $result == 0;
}