Verifica autorizzazioni file


14

Come posso verificare file permissions, senza dover eseguire il comando specifico del sistema operativo tramite passthru() o exec()?

17

Usa fileperms() funzione

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

0

Che cosa vuoi fare controllando i permessi dei file?

Quando si scrive codice sicuro, è quasi sempre errato "controllare, quindi fare" qualsiasi cosa. Il motivo è che tra il controllo della possibilità di fare qualcosa e la sua effettiva realizzazione, lo stato del sistema potrebbe cambiare in modo tale che farlo avrebbe un risultato diverso.

Ad esempio, se si controlla se un file esiste prima di scriverne uno, non controllare se il file è stato scritto correttamente (o non effettuare il check-in in modo sufficientemente dettagliato), e successivamente dipendere dal contenuto di il file che hai scritto, potresti effettivamente leggere un file scritto da un utente malintenzionato.

Quindi, invece di controllare i permessi dei file, basta fare qualunque cosa si andava a fare se il controllo delle autorizzazioni è riuscito e gestire gli errori con garbo.

+1

Ci sono sempre motivi possibili per il controllo delle autorizzazioni, forse sta costruendo un demone per le autorizzazioni di fissaggio, che doesn' t si basano sul suo script per leggere o scrivere sui file poiché un processo diverso lo farà. 20 mag. 112011-05-20 14:44:56

+1

Un altro esempio è un programma rewriteMap che funge da gate basato su determinate autorizzazioni di file. 21 mar. 122012-03-21 16:45:08


11

È possibile utilizzare i comandi is_readable(), is_executable() ecc.

+1

Attenzione che is_writable() non controlla l'appartenenza al gruppo (come da PHP 5.5.18). 12 nov. 142014-11-12 22:30:01


1

Usa fileperms() funzione e la stringa:

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

per il file:

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

Sostituire __FILE__ e __DIR__ con il vostro percorso o variabile


6

programmatori uso reale operazioni bit per bit, non stringhe;) Questo è molto più elegante modo di permessi di movimentazione:

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

Cosa restituisce, vero/falso? 06 mag. 142014-05-06 16:08:09