Pergunta

Como posso verificar file permissions, sem precisar executar comandos específicos do sistema operacional via passthru() ou exec()?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top