2008-08-21 14 views

Respuesta

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á. –

+1

Otro ejemplo es un programa rewriteMap que actúa como una puerta basada en ciertos permisos de archivos. – puk

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? – Sam

Cuestiones relacionadas