Verifique as permissões dos arquivos
-
09-06-2019 - |
Pergunta
Como posso verificar file permissions
, sem precisar executar comandos específicos do sistema operacional via passthru()
ou exec()
?
Solução
Usar permissões de arquivo() função
clearstatcache();
echo substr(sprintf('%o', fileperms('/etc/passwd')), -4);
Outras dicas
Você pode usar o é_legível(), é_executável() etc..comandos.
Codificadores reais usam operações bit a bit, não strings;) Esta é uma maneira muito mais elegante de lidar com permissões:
function checkPerms($path)
{
clearstatcache(null, $path);
return decoct( fileperms($path) & 0777 );
}
Usar permissões de arquivo() função e substring:
substr(decoct(fileperms(__DIR__)), -4); // 0777
substr(decoct(fileperms(__DIR__)), -3); // 777
Para arquivo:
substr(decoct(fileperms(__FILE__)), -4); // 0644
substr(decoct(fileperms(__FILE__)), -3); // 644
Substituir __FILE__
e __DIR__
com seu caminho ou variável
O que você deseja fazer verificando as permissões do arquivo?
Ao escrever código seguro, quase sempre é incorreto "verificar e depois fazer" qualquer coisa.A razão é que entre verificar se você pode fazer algo e realmente fazê-lo, o estado do sistema pode mudar de tal forma que fazê-lo teria um resultado diferente.
Por exemplo, se você verificar se um arquivo existe antes de escrever um, não verifique se você escreveu o arquivo com sucesso (ou não verifique de forma detalhada o suficiente) e depois dependa do conteúdo do arquivo que você escreveu , você pode estar lendo um arquivo escrito por um invasor.
Portanto, em vez de verificar as permissões do arquivo, basta fazer o que você faria se a verificação de permissões fosse bem-sucedida e lidar com os erros normalmente.