IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Vérifier le mode d'un chmod


Sujet :

Langage PHP

  1. #1
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut Vérifier le mode d'un chmod
    Bonjour,

    j'aimerais tester la valeur renseigné à un chmod...
    sachant que la valeur du mode doit être un nombre en notation octale, est-ce qu'à votre avis le test suivant est suffisant ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if ( preg_match('#[0-7]{3}#', decoct($mode)) ) {
        // ok
    } else {
        // erreur
    }
    Merci pour vos remarque.

    @+

  2. #2
    Membre chevronné
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Points : 2 015
    Points
    2 015
    Par défaut
    Et si tu testais toi-même ton script? Ou alors j'ai pas compris la question...

    Tu penses que ton truc est faux mais tu n'as pas réussi à trouver de failles pour le moment, ou tu n'as juste pas testé?

  3. #3
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    bien sur que j'ai testé mon script avant de poster... ainsi que quelques recherches.
    C'est pas spécialement pour les failles de sécurité (si c'est ça que tu veux dire) mais surtout pour ne pas oublier de cas spéciaux / particuliers car je ne maitrise absolument pas cette notation octale.
    Aussi pour savoir s'il n'y a pas plus simple / plus sûr que de passer par un string et un regex... à la manière d'un is_int().

  4. #4
    Membre chevronné
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Points : 2 015
    Points
    2 015
    Par défaut
    Ok, ça marche.

    Un premier conseil: là tu ne contrôles que si il y a une suite de 3 chiffres compris entre 0 et 7 dans ta chaîne de caractères. Ce qui veut dire que par exemple : "a752b" survivrait à ta moulinette.
    Solution:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if ( preg_match('#^[0-7]{3}$#', decoct($mode)) ) {
        // ok
    } else {
        // erreur
    }
    Ainsi ton pattern affirme qu'il commence le contrôle dès le début de la chaine et qu'il en est aussi la terminaison.
    Par contre, ton mode reste une suite d'entiers. Je vois pas trop à quoi te sers decoct. Tu peux être plus clair sur son utilité ici?

  5. #5
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    d'après mes tests $mode est analysé par preg_match en décimal...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    // mode qui doivent fonctionner
    $o->setPermission(0755);	// mode:493 decoct(mode):755 octdec(mode):35
    $o->setPermission(0666);	// mode:438 decoct(mode):666 octdec(mode):35
    $o->setPermission(0005);	// mode:5 decoct(mode):5 octdec(mode):5 (ne marche pas)
    $o->setPermission(0050);	// mode:40 decoct(mode):50 octdec(mode):32 (ne marche pas)
    // mode qui pourraient fonctionner
    $o->setPermission(111);		// mode:111 decoct(mode):157 octdec(mode):73
    $o->setPermission(755);		// mode:755 decoct(mode):1363 octdec(mode):493 (ne marche pas)
    // mode qui ne doivent pas fonctionner
    $o->setPermission(00550);	// mode:360 decoct(mode):550 octdec(mode):240 (ne marche pas)
    $o->setPermission(0785);	// mode:7 decoct(mode):7 octdec(mode):7
    $o->setPermission('0755');	// mode:0755 decoct(mode):1363 octdec(mode):493
    $o->setPermission('07a5');	// mode:07a5 decoct(mode):7 octdec(mode):61
    $o->setPermission('0755a');	// mode:0755a decoct(mode):1363 octdec(mode):493
    $o->setPermission(07551);	// mode:3945 decoct(mode):7551 octdec(mode):229
    sans traitement de $mode, sa valeur ne correspond à rien.. (à ma connaissance)

    exemple avec première ligne :
    sans decoct($mode) preg_match retourne FALSE car la valeur vaut 493 qui contient le caractère 9 interdit.

    Donc actuellement, le motif ~^[0-7]{3}$~ n'est pas correct... (car comme indiqué : 4 tests ne marchent pas)


  6. #6
    Membre chevronné
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Points : 2 015
    Points
    2 015
    Par défaut
    Ok, effectivement, ça ne peut pas marcher.

    Mais alors là du coup, je comprends pas d'où sort ton $mode, parce qu'il prend parfois des valeurs correctes correspondant à un chmod, parfois des valeurs "spéciales"... tu peux essayer de m'aider à comprendre?
    ça se trouve c'est pas sur l'expression qu'on doit agir (elle correspond à un chmod, je t'assure), mais donc sur la source de données qui à priori peut fournir des anneries...

  7. #7
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    Je développe une classe avec une fonction public setPermission($mode) permettant à un utilisateur de spécifier les droits d'un fichier. J'essaye donc de vérifier la valeur du paramètre $mode avant de l'utiliser dans un chmod($fichier, $mode).

    Donc, mon problème est de trouver une méthode fiable pour cette vérification...

  8. #8
    Membre chevronné
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Points : 2 015
    Points
    2 015
    Par défaut
    Ah ok. Ben alors faisons l'inverse. Contrôle effectivement la valeur saisie, mais juste en tant que valeur entière et décimale.

    Et selon les cas:
    • Si c'est dans un champ texte que se fait la saisie, contrôle que le CHMOD correspond à une valeur normale
    • Si c'est par une gestion graphique avec génération par un script, teste toutes les combinaisons de clic (512)
    • Si c'est interne au code, ben là, on peut rien pour le guignol qui met des anneries dans son code... Peut-être un commentaire mais bon, on peut pas sauver tous les demeurés

Discussions similaires

  1. Le grand mode d'emploi du forum, à lire si vous souhaitez tout savoir !
    Par Anomaly dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 2
    Dernier message: 03/06/2013, 17h36
  2. [XL-2007] Vérifier si le mode "protégé" d'intranet est activé ou pas.
    Par lenovo49 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 16/11/2011, 19h27
  3. Vérifier le chmod
    Par Tchupacabra dans le forum Langage
    Réponses: 3
    Dernier message: 02/07/2009, 00h34
  4. mode CHMOD 755 ? ? ?
    Par zabdaniel dans le forum Débuter
    Réponses: 4
    Dernier message: 07/12/2007, 10h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo