Controlla i permessi dei file
-
09-06-2019 - |
Domanda
Come posso controllare file permissions
, senza dover eseguire il comando specifico del sistema operativo tramite passthru()
O exec()
?
Soluzione
Utilizzo fileperms() funzione
clearstatcache();
echo substr(sprintf('%o', fileperms('/etc/passwd')), -4);
Altri suggerimenti
Puoi usare il è_leggibile(), è_eseguibile() eccetera..comandi.
I veri programmatori utilizzano operazioni bit a bit, non stringhe ;) Questo è un modo molto più elegante di gestire le autorizzazioni:
function checkPerms($path)
{
clearstatcache(null, $path);
return decoct( fileperms($path) & 0777 );
}
Utilizzo fileperms() funzione e sottostringa:
substr(decoct(fileperms(__DIR__)), -4); // 0777
substr(decoct(fileperms(__DIR__)), -3); // 777
Per il fascicolo:
substr(decoct(fileperms(__FILE__)), -4); // 0644
substr(decoct(fileperms(__FILE__)), -3); // 644
Sostituire __FILE__
E __DIR__
con il tuo percorso o variabile
Cosa vuoi fare controllando i permessi dei file?
Quando si scrive codice sicuro, è quasi sempre errato "controllare, quindi eseguire" qualsiasi cosa.Il motivo è che tra il verificare se si può fare qualcosa e il farlo effettivamente, lo stato del sistema potrebbe cambiare in modo tale che farlo avrebbe un risultato diverso.
Ad esempio, se controlli se un file esiste prima di scriverne uno, non controlla se hai scritto il file con successo (o non controlla in modo sufficientemente dettagliato), e poi dipende dal contenuto del file che hai scritto , potresti effettivamente leggere un file scritto da un utente malintenzionato.
Quindi, invece di controllare i permessi dei file, fai semplicemente quello che avresti fatto se il controllo dei permessi avesse avuto esito positivo e gestisci gli errori con garbo.