PHP с постоянным временем реального пути ()?

Я ищу реализацию realpath() с постоянным временем, существует ли она?

Я нахожусь в ситуации, когда злоумышленник может управлять аргументом для realpath() и теоретически может использовать атаку по времени, чтобы определить, указывает ли realpath() на реальный файл или нет.


person hanshenrik    schedule 28.10.2019    source источник


Ответы (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, чтобы проверить, действительно ли это было постоянное время, или вам нужно было установить более высокое значение.

person hanshenrik    schedule 28.10.2019