C r         p r PHP
                     Auditeur statique de code PHP




jeudi 10 mars 2011
A

                     • Qu’est-ce que Cornac?
                     • Application et résultats
                     • Comment améliorer la qualité du code


jeudi 10 mars 2011
Q p r ?

                     • Damien Seguy
                     • Consultant à Alter way Consulting,
                       Alter Way Group

                     • Industrialisation, expertise LAMP
                     • damien.seguy@alterway.fr

jeudi 10 mars 2011
Y ,w   q
jeudi 10 mars 2011
./bin/cornac -I spotweb.ini
                     > Tokenizeur
                     > Auditeur
                     > Done



jeudi 10 mars 2011
I v   r r p




jeudi 10 mars 2011
I v   r r p




jeudi 10 mars 2011
I v   r r p




jeudi 10 mars 2011
I v   r r p




jeudi 10 mars 2011
C r

                     • Auditeur statique
                     • Analyse le code PHP sans l’exécuter
                     • Scrute une application dans son
                       ensemble




jeudi 10 mars 2011
N p      f      r
         • Xdebug
          • xdebug exécute le code
         • grep
          • grep ne comprend pas la sémantique PHP
         • CodeSniffer
          • CodeSniffer applique des conventions de
                     codage

jeudi 10 mars 2011
A       f      r

                     • PMD
                      • PHP Mess Detector
                     • PHP_Depends


jeudi 10 mars 2011
L                     PHP


                         • Véritable liste des extensions
                         • Pratique pour les déploiements
                         • Aimé par les hébergeurs


jeudi 10 mars 2011
A            r         q
                     • Traite de grosses quantités de code
                     • Traite de manière répétitive
                     • Dépend de l’expérience d’auditeur
                     • Automatise les recherches
                     • Systématise les recherches
                     • Produit beaucoup de faux positifs
jeudi 10 mars 2011
C




jeudi 10 mars 2011
C




jeudi 10 mars 2011
C




jeudi 10 mars 2011
C




jeudi 10 mars 2011
I v            r      ’ pp

                     • Prendre du recul sur l’application
                     • Lister les noms utilisés
                     • Lister les fonctionnalités utilisées


jeudi 10 mars 2011
Ap                      q

                     • Lister tous les aspects techniques
                      • Fonctionnalités PHP
                      • Fonctionnalités avancées
                      • Fonctionnalités obsolètes
                      • Dépendances

jeudi 10 mars 2011
M r              5.3

                     • Fonctions obsolètes
                     • Passage par référence
                     • Référence après new
                     • mktime ne prend plus 7 paramètres

jeudi 10 mars 2011
N                 r       r

                     • Extrait toutes les structures nommées
                     • Étudie leurs conventions
                     • Étudie leur ensemble
                     • Étudie leur sémantique

jeudi 10 mars 2011
jeudi 10 mars 2011
jeudi 10 mars 2011
jeudi 10 mars 2011
jeudi 10 mars 2011
jeudi 10 mars 2011
jeudi 10 mars 2011
jeudi 10 mars 2011
? ? ?


jeudi 10 mars 2011
? ? ?


jeudi 10 mars 2011
R    ’
   • include*, require*
   • Ignore les variables
   • Les cercles sont les
          fichiers

   • Les flèches indiquent
          l’inclusion




jeudi 10 mars 2011
R         ’

   • Inclusions uniques
   • Inclusions multiples
   • Inclusions d’inclusions
   • Inclusions doubles


jeudi 10 mars 2011
U
   • Lien entre la définition
          d’une constante et son
          utilisation

   • Les constantes sont
          utilisées dans leur
          fichier de définition

   • Sauf une

jeudi 10 mars 2011
Ap rç          ’       b


                     • Affichage global
                     • Pas d’analyse détaillée


jeudi 10 mars 2011
H r r

                     • Version DOT
                     • Peu d’extensions
                     • Où est la classe db?



jeudi 10 mars 2011
H r r




                     • Exemple de dotclear
jeudi 10 mars 2011
H r r




jeudi 10 mars 2011
Vr   Gp




jeudi 10 mars 2011
jeudi 10 mars 2011
jeudi 10 mars 2011
R                    C r

                     • Cornac utilise le tokenizer de PHP
                     • Il ajoute une couche de détection des
                       structures complexes

                     • Il se débarrasse des éléments de syntaxe
                      • {} [] () ; , ‘’ «»

jeudi 10 mars 2011
r
             <?php print ("hello $world! "); ?>
                     [1] => Array
                         (                       [6] => Array
                             [0] => 266              (
                             [1] => print                [0] => 309
                             [2] => 1                    [1] => $world
                         )                               [2] => 1
                                                     )
                     [2] => Array
                         (                       [7] => Array
                             [0] => 370              (
                             [1] =>                      [0] => 314
                             [2] => 1                    [1] => !
                         )                               [2] => 1
                                                     )
                     [3] => (
                     [4] => "                    [8] => "
                     [5] => Array                [9] => )
                         (                       [10] => ;
                              [0] => 314
                              [1] => hello
                              [2] => 1            [1] => Array
                         )                            (
                                                           [0] => token PHP
                                                           [1] => code PHP
                                                           [2] => ligne
                                                      )
                                                  [2] => "


jeudi 10 mars 2011
r
             <?php print ("hello $world! "); ?>




jeudi 10 mars 2011
r




jeudi 10 mars 2011
L   v r b




jeudi 10 mars 2011
L   v r b




jeudi 10 mars 2011
L   v r b




jeudi 10 mars 2011
L   v r b




jeudi 10 mars 2011
L   v r b




jeudi 10 mars 2011
L   v r b




jeudi 10 mars 2011
Iff




jeudi 10 mars 2011
Iff




jeudi 10 mars 2011
Iff




jeudi 10 mars 2011
Iff




jeudi 10 mars 2011
C




                     • Classes, propriétés, variables, fonctions, constantes

jeudi 10 mars 2011
F

            Token        Auditeur   Affichage
             izeur




                         Analyzer

jeudi 10 mars 2011
Ev

            Token
                                 • Web
             izeur
                      Auditeur
                                 • XML
                                 • ODS
                                 • PHPCodeBrow
                                 • Sonar
                      Analyzer

jeudi 10 mars 2011
Rè
                     • Sécurité
                     • Recommandations (groupe PHP, CMS..)
                     • Conventions maison
                     • Migration PHP 5.3
                     • Performances
                     • Motif de conceptions
jeudi 10 mars 2011
http://www.cornac.info/
                damien.seguy@alterway.fr

jeudi 10 mars 2011
jeudi 10 mars 2011

Auditeur statique PHP

  • 1.
    C r p r PHP Auditeur statique de code PHP jeudi 10 mars 2011
  • 2.
    A • Qu’est-ce que Cornac? • Application et résultats • Comment améliorer la qualité du code jeudi 10 mars 2011
  • 3.
    Q p r? • Damien Seguy • Consultant à Alter way Consulting, Alter Way Group • Industrialisation, expertise LAMP • damien.seguy@alterway.fr jeudi 10 mars 2011
  • 4.
    Y ,w q jeudi 10 mars 2011
  • 5.
    ./bin/cornac -I spotweb.ini > Tokenizeur > Auditeur > Done jeudi 10 mars 2011
  • 6.
    I v r r p jeudi 10 mars 2011
  • 7.
    I v r r p jeudi 10 mars 2011
  • 8.
    I v r r p jeudi 10 mars 2011
  • 9.
    I v r r p jeudi 10 mars 2011
  • 10.
    C r • Auditeur statique • Analyse le code PHP sans l’exécuter • Scrute une application dans son ensemble jeudi 10 mars 2011
  • 11.
    N p f r • Xdebug • xdebug exécute le code • grep • grep ne comprend pas la sémantique PHP • CodeSniffer • CodeSniffer applique des conventions de codage jeudi 10 mars 2011
  • 12.
    A f r • PMD • PHP Mess Detector • PHP_Depends jeudi 10 mars 2011
  • 13.
    L PHP • Véritable liste des extensions • Pratique pour les déploiements • Aimé par les hébergeurs jeudi 10 mars 2011
  • 14.
    A r q • Traite de grosses quantités de code • Traite de manière répétitive • Dépend de l’expérience d’auditeur • Automatise les recherches • Systématise les recherches • Produit beaucoup de faux positifs jeudi 10 mars 2011
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
    I v r ’ pp • Prendre du recul sur l’application • Lister les noms utilisés • Lister les fonctionnalités utilisées jeudi 10 mars 2011
  • 20.
    Ap q • Lister tous les aspects techniques • Fonctionnalités PHP • Fonctionnalités avancées • Fonctionnalités obsolètes • Dépendances jeudi 10 mars 2011
  • 21.
    M r 5.3 • Fonctions obsolètes • Passage par référence • Référence après new • mktime ne prend plus 7 paramètres jeudi 10 mars 2011
  • 22.
    N r r • Extrait toutes les structures nommées • Étudie leurs conventions • Étudie leur ensemble • Étudie leur sémantique jeudi 10 mars 2011
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
    ? ? ? jeudi10 mars 2011
  • 31.
    ? ? ? jeudi10 mars 2011
  • 32.
    R ’ • include*, require* • Ignore les variables • Les cercles sont les fichiers • Les flèches indiquent l’inclusion jeudi 10 mars 2011
  • 33.
    R ’ • Inclusions uniques • Inclusions multiples • Inclusions d’inclusions • Inclusions doubles jeudi 10 mars 2011
  • 34.
    U • Lien entre la définition d’une constante et son utilisation • Les constantes sont utilisées dans leur fichier de définition • Sauf une jeudi 10 mars 2011
  • 35.
    Ap rç ’ b • Affichage global • Pas d’analyse détaillée jeudi 10 mars 2011
  • 36.
    H r r • Version DOT • Peu d’extensions • Où est la classe db? jeudi 10 mars 2011
  • 37.
    H r r • Exemple de dotclear jeudi 10 mars 2011
  • 38.
    H r r jeudi10 mars 2011
  • 39.
    Vr Gp jeudi 10 mars 2011
  • 40.
  • 41.
  • 42.
    R C r • Cornac utilise le tokenizer de PHP • Il ajoute une couche de détection des structures complexes • Il se débarrasse des éléments de syntaxe • {} [] () ; , ‘’ «» jeudi 10 mars 2011
  • 43.
    r <?php print ("hello $world! "); ?> [1] => Array ( [6] => Array [0] => 266 ( [1] => print [0] => 309 [2] => 1 [1] => $world ) [2] => 1 ) [2] => Array ( [7] => Array [0] => 370 ( [1] => [0] => 314 [2] => 1 [1] => ! ) [2] => 1 ) [3] => ( [4] => " [8] => " [5] => Array [9] => ) ( [10] => ; [0] => 314 [1] => hello [2] => 1 [1] => Array ) ( [0] => token PHP [1] => code PHP [2] => ligne ) [2] => " jeudi 10 mars 2011
  • 44.
    r <?php print ("hello $world! "); ?> jeudi 10 mars 2011
  • 45.
  • 46.
    L v r b jeudi 10 mars 2011
  • 47.
    L v r b jeudi 10 mars 2011
  • 48.
    L v r b jeudi 10 mars 2011
  • 49.
    L v r b jeudi 10 mars 2011
  • 50.
    L v r b jeudi 10 mars 2011
  • 51.
    L v r b jeudi 10 mars 2011
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
    C • Classes, propriétés, variables, fonctions, constantes jeudi 10 mars 2011
  • 57.
    F Token Auditeur Affichage izeur Analyzer jeudi 10 mars 2011
  • 58.
    Ev Token • Web izeur Auditeur • XML • ODS • PHPCodeBrow • Sonar Analyzer jeudi 10 mars 2011
  • 59.
    • Sécurité • Recommandations (groupe PHP, CMS..) • Conventions maison • Migration PHP 5.3 • Performances • Motif de conceptions jeudi 10 mars 2011
  • 60.
    http://www.cornac.info/ damien.seguy@alterway.fr jeudi 10 mars 2011
  • 61.