有很多关于 PHP 的文章指出,在进行直接字符串比较时可能会发生持续定时攻击。我编写了一些示例代码来尝试确定数量级差异,但它表明即使进行数百万次测试,也并非总是一个比另一个快。
您会期望第一次迭代活动时间更快,因为字符串中的第一个字符是错误的,因此比较可以退出,但情况并非总是如此。
$target = 'hello-world';
$comparison = ['Xello-world', 'hello-worlX'];
foreach($comparison as $x){
$time = 0;
$total = 500000;
for($i = 0; $i < $total; $i++){
$start = microtime(true);
/** Actually perform the comparison */
$result = ($target === $comparison);
$end = microtime(true);
/** Add up so we can compute the average **/
$time += $end - $start;
}
echo "Duration for $x: " . ($time / $total) . PHP_EOL;
}