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


14

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

17

Использование fileperms() функция

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

0

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

При написании защищенного кода почти всегда неверно «проверять, а затем делать» что угодно. Причина в том, что между проверкой того, можете ли вы что-то сделать и действительно ли это сделать, состояние системы может измениться так, что выполнение этого будет иметь другой результат.

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

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

+1

Есть всегда выполнимые причины для проверки прав доступа, возможно, он строит демон разрешений фиксирующих, который Безразлично» t полагаться на свой скрипт для чтения или записи в файлы, так как другой процесс будет делать это. 20 май. 112011-05-20 14:44:56

+1

Другим примером является программа rewriteMap, которая действует как затвор на основе определенных прав доступа к файлам. 21 мар. 122012-03-21 16:45:08


11

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

+1

Имейте в виду, что is_writable() не проверяет членство в группе (начиная с PHP 5.5.18). 12 ноя. 142014-11-12 22:30:01


1

Использование 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__ с вашего пути или переменной


6

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

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

Что это значит, true/false? 06 май. 142014-05-06 16:08:09