Question

Comment puis-je vérifier file permissions, sans avoir à exécuter une commande spécifique au système d'exploitation via passthru() ou exec()?

Était-ce utile?

La solution

Utiliser fichierperms() fonction

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

Autres conseils

Vous pouvez utiliser le est_readable(), est_exécutable() etc..commandes.

Les vrais codeurs utilisent des opérations au niveau du bit, pas des chaînes ;) C'est une manière beaucoup plus élégante de gérer les autorisations :

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

Utiliser fichierperms() fonction et sous-chaîne :

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

Pour fichier :

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

Remplacer __FILE__ et __DIR__ avec votre chemin ou variable

Que voulez-vous faire en vérifiant les autorisations des fichiers ?

Lors de l'écriture de code sécurisé, il est presque toujours incorrect de « vérifier, puis de faire » quoi que ce soit.La raison en est qu'entre le fait de vérifier si vous pouvez faire quelque chose et celui de le faire réellement, l'état du système pourrait changer de telle sorte que le faire aurait un résultat différent.

Par exemple, si vous vérifiez si un fichier existe avant d'en écrire un, ne vérifiez pas si vous avez écrit le fichier avec succès (ou ne vérifiez pas de manière suffisamment détaillée), et dépendez ensuite du contenu du fichier que vous avez écrit. , vous pourriez en fait lire un fichier écrit par un attaquant.

Ainsi, au lieu de vérifier les autorisations des fichiers, faites simplement ce que vous alliez faire si la vérification des autorisations réussit et gérez les erreurs avec élégance.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top