Comprobar los permisos del archivo


14

¿Cómo puedo verificar file permissions, sin tener que ejecutar el comando específico del sistema operativo a través de passthru() o exec()?

17

Uso fileperms() función

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

0

¿Qué desea hacer revisando los permisos de los archivos?

Al escribir código de seguridad, casi siempre es incorrecto "verificar, luego hacer" cualquier cosa. La razón es que, entre la comprobación de si puede hacer algo y realmente hacerlo, el estado del sistema podría cambiar de tal manera que hacerlo tendría un resultado diferente.

Por ejemplo, si comprueba si un archivo existe antes de escribir uno, no verifique si escribió el archivo correctamente (o si no lo hace con suficiente detalle), y luego dependa del contenido de el archivo que escribió, podría estar leyendo un archivo escrito por un atacante.

Así que, en lugar de verificar los permisos de los archivos, simplemente haga lo que sea que iba a hacer si la verificación de permisos se realiza correctamente y maneje los errores correctamente.

+1

Siempre hay razones viables para la comprobación de permisos, tal vez que está construyendo un demonio para los permisos de fijación, que doesn' Confío en su script para leer o escribir en los archivos, ya que un proceso diferente lo hará. 20 may. 112011-05-20 14:44:56

+1

Otro ejemplo es un programa rewriteMap que actúa como una puerta basada en ciertos permisos de archivos. 21 mar. 122012-03-21 16:45:08


11

Puede usar los comandos is_readable(), is_executable() etc. ..

+1

Tenga en cuenta que is_writable() no verifica la pertenencia a un grupo (a partir de PHP 5.5.18). 12 nov. 142014-11-12 22:30:01


1

Uso fileperms() función y subcadena:

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

Para archivo:

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

Reemplazar __FILE__ y __DIR__ con su ruta o variable


6

codificadores reales utilizan operaciones bit a bit, no cadenas;) Esto es mucho más elegante modo de permisos de manejo:

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

¿Qué devuelve esto, verdadero/falso? 06 may. 142014-05-06 16:08:09