Сведения о вопросе

FUTER

00:07, 12th August, 2020

Теги

Проверьте права доступа к файлам

Просмотров: 458   Ответов: 5

Как я могу проверить file permissions, не имея необходимости запускать конкретную команду операционной системы через passthru() или exec() ?



  Сведения об ответе

SEEYOU

00:45, 22nd August, 2020

Используйте функцию fileperms()

clearstatcache();
echo substr(sprintf('%o', fileperms('/etc/passwd')), -4);


  Сведения об ответе

Chhiki

10:37, 17th August, 2020

Вы можете использовать is_readable(), is_executable() и т.д.. команды.


  Сведения об ответе

ITSME

08:47, 12th August, 2020

Реальные кодеры используют побитовые операции, а не строки ;) это гораздо более элегантный способ обработки разрешений:

function checkPerms($path)
{
    clearstatcache(null, $path);
    return decoct( fileperms($path) & 0777 );
}


  Сведения об ответе

ASSembler

07:55, 29th August, 2020

Используйте функцию fileperms() и подстроку:

substr(decoct(fileperms(__DIR__)), -4); // 0777
substr(decoct(fileperms(__DIR__)), -3); // 777

Для файлов:

substr(decoct(fileperms(__FILE__)), -4); // 0644
substr(decoct(fileperms(__FILE__)), -3); // 644

Замените __FILE__ и __DIR__ вашим путем или переменной


  Сведения об ответе

#hash

04:29, 4th August, 2020

Что вы хотите сделать, проверив права доступа к файлам?

При написании защищенного кода почти всегда неверно указывать "check, then do" что-либо. Причина заключается в том, что между проверкой того, можете ли вы что-то сделать, и фактическим выполнением этого, состояние системы может измениться таким образом, что выполнение этого будет иметь другой результат.

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

Поэтому вместо того, чтобы проверять разрешения файлов, просто делайте то, что вы собирались сделать, если проверка разрешений прошла успешно, и аккуратно обрабатывайте ошибки.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться