Auditeur statique PHP

1,641 views

Published on

L'analyse de code PHP se fait le plus souvent manuellement : il faut lire le code pour le comprendre.

L'analyse statique permet d'aller plus vite, et dans tous les recoins de l'application : elle travaille sans se lasser, exhaustivement, mais sous direction.

Durant la session, nous mettrons en place un analyseur statique pour PHP, pour détecter automatiquement l'arbre des inclusions, les arguments jamais utilisés, les affectations de GPC, et produire un inventaire à la Prévert du code.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,641
On SlideShare
0
From Embeds
0
Number of Embeds
24
Actions
Shares
0
Downloads
16
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Auditeur statique PHP

  1. 1. C r p r PHP Auditeur statique de code PHPjeudi 10 mars 2011
  2. 2. A • Qu’est-ce que Cornac? • Application et résultats • Comment améliorer la qualité du codejeudi 10 mars 2011
  3. 3. Q p r ? • Damien Seguy • Consultant à Alter way Consulting, Alter Way Group • Industrialisation, expertise LAMP • damien.seguy@alterway.frjeudi 10 mars 2011
  4. 4. Y ,w qjeudi 10 mars 2011
  5. 5. ./bin/cornac -I spotweb.ini > Tokenizeur > Auditeur > Donejeudi 10 mars 2011
  6. 6. I v r r pjeudi 10 mars 2011
  7. 7. I v r r pjeudi 10 mars 2011
  8. 8. I v r r pjeudi 10 mars 2011
  9. 9. I v r r pjeudi 10 mars 2011
  10. 10. C r • Auditeur statique • Analyse le code PHP sans l’exécuter • Scrute une application dans son ensemblejeudi 10 mars 2011
  11. 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 codagejeudi 10 mars 2011
  12. 12. A f r • PMD • PHP Mess Detector • PHP_Dependsjeudi 10 mars 2011
  13. 13. L PHP • Véritable liste des extensions • Pratique pour les déploiements • Aimé par les hébergeursjeudi 10 mars 2011
  14. 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 positifsjeudi 10 mars 2011
  15. 15. Cjeudi 10 mars 2011
  16. 16. Cjeudi 10 mars 2011
  17. 17. Cjeudi 10 mars 2011
  18. 18. Cjeudi 10 mars 2011
  19. 19. I v r ’ pp • Prendre du recul sur l’application • Lister les noms utilisés • Lister les fonctionnalités utiliséesjeudi 10 mars 2011
  20. 20. Ap q • Lister tous les aspects techniques • Fonctionnalités PHP • Fonctionnalités avancées • Fonctionnalités obsolètes • Dépendancesjeudi 10 mars 2011
  21. 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ètresjeudi 10 mars 2011
  22. 22. N r r • Extrait toutes les structures nommées • Étudie leurs conventions • Étudie leur ensemble • Étudie leur sémantiquejeudi 10 mars 2011
  23. 23. jeudi 10 mars 2011
  24. 24. jeudi 10 mars 2011
  25. 25. jeudi 10 mars 2011
  26. 26. jeudi 10 mars 2011
  27. 27. jeudi 10 mars 2011
  28. 28. jeudi 10 mars 2011
  29. 29. jeudi 10 mars 2011
  30. 30. ? ? ?jeudi 10 mars 2011
  31. 31. ? ? ?jeudi 10 mars 2011
  32. 32. R ’ • include*, require* • Ignore les variables • Les cercles sont les fichiers • Les flèches indiquent l’inclusionjeudi 10 mars 2011
  33. 33. R ’ • Inclusions uniques • Inclusions multiples • Inclusions d’inclusions • Inclusions doublesjeudi 10 mars 2011
  34. 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 unejeudi 10 mars 2011
  35. 35. Ap rç ’ b • Affichage global • Pas d’analyse détailléejeudi 10 mars 2011
  36. 36. H r r • Version DOT • Peu d’extensions • Où est la classe db?jeudi 10 mars 2011
  37. 37. H r r • Exemple de dotclearjeudi 10 mars 2011
  38. 38. H r rjeudi 10 mars 2011
  39. 39. Vr Gpjeudi 10 mars 2011
  40. 40. jeudi 10 mars 2011
  41. 41. jeudi 10 mars 2011
  42. 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. 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. 44. r <?php print ("hello $world! "); ?>jeudi 10 mars 2011
  45. 45. rjeudi 10 mars 2011
  46. 46. L v r bjeudi 10 mars 2011
  47. 47. L v r bjeudi 10 mars 2011
  48. 48. L v r bjeudi 10 mars 2011
  49. 49. L v r bjeudi 10 mars 2011
  50. 50. L v r bjeudi 10 mars 2011
  51. 51. L v r bjeudi 10 mars 2011
  52. 52. Iffjeudi 10 mars 2011
  53. 53. Iffjeudi 10 mars 2011
  54. 54. Iffjeudi 10 mars 2011
  55. 55. Iffjeudi 10 mars 2011
  56. 56. C • Classes, propriétés, variables, fonctions, constantesjeudi 10 mars 2011
  57. 57. F Token Auditeur Affichage izeur Analyzerjeudi 10 mars 2011
  58. 58. Ev Token • Web izeur Auditeur • XML • ODS • PHPCodeBrow • Sonar Analyzerjeudi 10 mars 2011
  59. 59. Rè • Sécurité • Recommandations (groupe PHP, CMS..) • Conventions maison • Migration PHP 5.3 • Performances • Motif de conceptionsjeudi 10 mars 2011
  60. 60. http://www.cornac.info/ damien.seguy@alterway.frjeudi 10 mars 2011
  61. 61. jeudi 10 mars 2011

×