Pregunta

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

¿Fue útil?

Solución

Uso fileperms() la función

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

Otros consejos

Usted puede utilizar el is_readable(), is_executable() etc..los comandos.

Real codificadores uso de las operaciones bit a bit, no cadenas ;) Esto es mucho más elegante de la forma de manejo de permisos:

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

Uso fileperms() la función y la subcadena:

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

Para el archivo:

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

Reemplazar __FILE__ y __DIR__ con la ruta de acceso o variable

¿Qué desea hacer mediante la comprobación de los permisos de archivo?

Cuando la escritura de código de seguridad, es casi siempre correcto "de verificación, a continuación, hacer" nada.La razón es que entre la comprobación de si se puede hacer algo y hacerlo realidad, el estado del sistema podrían cambiar dicho que de hacerlo tendría un resultado diferente.

Por ejemplo, si usted comprobar si existe un archivo antes de escribir uno, no marque la casilla si usted escribió el archivo correctamente (o no la verificación en un detalle bastante de moda), y luego dependerá del contenido de los archivos que usted escribió, que realmente podría ser la lectura de un archivo escrito por un atacante.

Así que en lugar de comprobar los permisos de archivo, basta con hacer lo que iban a hacer si la verificación de los permisos éxito, y controlar los errores correctamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top