Как я могу проверить file permissions
, не выполняя определенную команду операционной системы через passthru()
или exec()
?
Используйте fileperms () функция
clearstatcache();
echo substr(sprintf('%o', fileperms('/etc/passwd')), -4);
Что вы хотите сделать, проверив права доступа к файлам?
При написании безопасного кода почти всегда неправильно «проверять, а затем делать» что-либо. Причина в том, что между проверкой того, можете ли вы что-то сделать, и фактическим выполнением, состояние системы может измениться так, что выполнение этого приведет к другому результату.
Например, если вы проверяете, существует ли файл перед его записью, не проверяйте, успешно ли вы написали файл (или не проверили достаточно подробно), а затем позже зависите от содержимого файла, который вы написали. Вы могли бы на самом деле читать файл, написанный злоумышленником.
Поэтому вместо проверки прав доступа к файлам просто сделайте то, что вы собирались сделать, если проверка разрешений прошла успешно, и корректно обработайте ошибки.
Вы можете использовать команды is_readable () , is_executable () и т. Д.
Используйте функцию 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__
вашим путем или переменной
Реальные кодеры используют побитовые операции, а не строки;) Это гораздо более элегантный способ обработки разрешений:
function checkPerms($path)
{
clearstatcache(null, $path);
return decoct( fileperms($path) & 0777 );
}