Vérifier les autorisations des fichiers
-
09-06-2019 - |
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()
?
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.