1

有很多关于 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;
}
4

0 回答 0