PHP с постоянным временем realpath()?
Я ищу постоянную реализацию realpath(), существует ли она?
Я нахожусь в ситуации, когда злоумышленник может управлять аргументом для realpath() и теоретически может использовать временную атаку, чтобы определить, указывает ли realpath() на реальный файл или нет.
1 ответ
Это должно работать,
function realpath_constant_time(string $path, float $target_seconds, bool &$constant_time_success = null){
$start_time=microtime(true);
$ret=realpath($path);
$constant_time_success = @time_sleep_until($start_time+$target_seconds);
return $ret;
}
например, в реальном времени, которое всегда использует ровно 1 миллисекунду (должно быть более чем достаточно для серверов на основе SSD, возможно, для вращающихся серверов на основе жестких дисков может потребоваться что-то ближе к 10 миллисекундам, я не знаю):
realpath_constant_time("/path/to/../to/file.txt",0.001,$constant_time_success);
и вы можете использовать $constant_time_success, чтобы проверить, было ли это на самом деле постоянным временем, или вам нужно установить более высокое значение..