ZendFrameworkのHTTPAuthライブラリでこのコードに出くわしました。より安全にするために、特別な文字列比較関数を使用しているようです。ただ、コメントがよくわかりません。この関数が実行するよりも安全である理由を誰かが説明でき$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;
}