61
Cr pr PHP Auditeur statique de code PHP jeudi 10 mars 2011

Auditeur statique PHP

Embed Size (px)

DESCRIPTION

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.

Citation preview

Page 1: Auditeur statique PHP

Cornac pour PHPAuditeur statique de code PHP

jeudi 10 mars 2011

Page 2: Auditeur statique PHP

Agenda

•Qu’est-ce que Cornac?

•Application et résultats

•Comment améliorer la qualité du code

jeudi 10 mars 2011

Page 3: Auditeur statique PHP

Qui parle?

•Damien Seguy

•Consultant à Alter way Consulting, Alter Way Group

•Industrialisation, expertise LAMP

[email protected]

jeudi 10 mars 2011

Page 4: Auditeur statique PHP

Yes, we take questionsjeudi 10 mars 2011

Page 5: Auditeur statique PHP

./bin/cornac -I spotweb.ini> Tokenizeur

> Auditeur> Done

jeudi 10 mars 2011

Page 6: Auditeur statique PHP

Inventaire rapide

jeudi 10 mars 2011

Page 7: Auditeur statique PHP

Inventaire rapide

jeudi 10 mars 2011

Page 8: Auditeur statique PHP

Inventaire rapide

jeudi 10 mars 2011

Page 9: Auditeur statique PHP

Inventaire rapide

jeudi 10 mars 2011

Page 10: Auditeur statique PHP

Cornac

•Auditeur statique

•Analyse le code PHP sans l’exécuter

•Scrute une application dans son ensemble

jeudi 10 mars 2011

Page 11: Auditeur statique PHP

Ne pas confondre•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

Page 12: Auditeur statique PHP

A confondre

•PMD

•PHP Mess Detector

•PHP_Depends

jeudi 10 mars 2011

Page 13: Auditeur statique PHP

Liste des .tensions PHP

•Véritable liste des extensions

•Pratique pour les déploiements

•Aimé par les hébergeurs

jeudi 10 mars 2011

Page 14: Auditeur statique PHP

Auditeur statique•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

Page 15: Auditeur statique PHP

Classes

jeudi 10 mars 2011

Page 16: Auditeur statique PHP

Classes

jeudi 10 mars 2011

Page 17: Auditeur statique PHP

Classes

jeudi 10 mars 2011

Page 18: Auditeur statique PHP

Classes

jeudi 10 mars 2011

Page 19: Auditeur statique PHP

Inventaire d’application

•Prendre du recul sur l’application

•Lister les noms utilisés

•Lister les fonctionnalités utilisées

jeudi 10 mars 2011

Page 20: Auditeur statique PHP

Aspects techniques

•Lister tous les aspects techniques

•Fonctionnalités PHP

•Fonctionnalités avancées

•Fonctionnalités obsolètes

•Dépendances

jeudi 10 mars 2011

Page 21: Auditeur statique PHP

Migration 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

Page 22: Auditeur statique PHP

Noms de structure

•Extrait toutes les structures nommées

•Étudie leurs conventions

•Étudie leur ensemble

•Étudie leur sémantique

jeudi 10 mars 2011

Page 23: Auditeur statique PHP

jeudi 10 mars 2011

Page 24: Auditeur statique PHP

jeudi 10 mars 2011

Page 25: Auditeur statique PHP

jeudi 10 mars 2011

Page 26: Auditeur statique PHP

jeudi 10 mars 2011

Page 27: Auditeur statique PHP

jeudi 10 mars 2011

Page 28: Auditeur statique PHP

jeudi 10 mars 2011

Page 29: Auditeur statique PHP

jeudi 10 mars 2011

Page 30: Auditeur statique PHP

? ? ?

jeudi 10 mars 2011

Page 31: Auditeur statique PHP

? ? ?

jeudi 10 mars 2011

Page 32: Auditeur statique PHP

Réseau d’inclusions

• include*, require*

• Ignore les variables

• Les cercles sont les fichiers

• Les flèches indiquent l’inclusion

jeudi 10 mars 2011

Page 33: Auditeur statique PHP

Réseau d’inclusions

• Inclusions uniques

• Inclusions multiples

• Inclusions d’inclusions

• Inclusions doubles

jeudi 10 mars 2011

Page 34: Auditeur statique PHP

Utilisation des constantes

• 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

Page 35: Auditeur statique PHP

Aperçu d’ensemble

•Affichage global

•Pas d’analyse détaillée

jeudi 10 mars 2011

Page 36: Auditeur statique PHP

Hiérarchies

• Version DOT

• Peu d’extensions

• Où est la classe db?

jeudi 10 mars 2011

Page 37: Auditeur statique PHP

Hiérarchies

• Exemple de dotclear

jeudi 10 mars 2011

Page 38: Auditeur statique PHP

Hiérarchies

jeudi 10 mars 2011

Page 39: Auditeur statique PHP

Version Gephi

jeudi 10 mars 2011

Page 40: Auditeur statique PHP

jeudi 10 mars 2011

Page 41: Auditeur statique PHP

jeudi 10 mars 2011

Page 42: Auditeur statique PHP

Rouages de Cornac

•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

Page 43: Auditeur statique PHP

2tractions [6] => Array ( [0] => 309 [1] => $world [2] => 1 )

[7] => Array ( [0] => 314 [1] => ! [2] => 1 )

[8] => " [9] => ) [10] => ;

[1] => Array ( [0] => token PHP [1] => code PHP [2] => ligne ) [2] => "

<?php print ("hello $world! "); ?> [1] => Array ( [0] => 266 [1] => print [2] => 1 )

[2] => Array ( [0] => 370 [1] => [2] => 1 )

[3] => ( [4] => " [5] => Array ( [0] => 314 [1] => hello [2] => 1 )

jeudi 10 mars 2011

Page 44: Auditeur statique PHP

2tractions<?php print ("hello $world! "); ?>

jeudi 10 mars 2011

Page 45: Auditeur statique PHP

2tractions

jeudi 10 mars 2011

Page 46: Auditeur statique PHP

Liste des variables

jeudi 10 mars 2011

Page 47: Auditeur statique PHP

Liste des variables

jeudi 10 mars 2011

Page 48: Auditeur statique PHP

Liste des variables

jeudi 10 mars 2011

Page 49: Auditeur statique PHP

Liste des variables

jeudi 10 mars 2011

Page 50: Auditeur statique PHP

Liste des variables

jeudi 10 mars 2011

Page 51: Auditeur statique PHP

Liste des variables

jeudi 10 mars 2011

Page 52: Auditeur statique PHP

Iffectations

jeudi 10 mars 2011

Page 53: Auditeur statique PHP

Iffectations

jeudi 10 mars 2011

Page 54: Auditeur statique PHP

Iffectations

jeudi 10 mars 2011

Page 55: Auditeur statique PHP

Iffectations

jeudi 10 mars 2011

Page 56: Auditeur statique PHP

Classes inutilisées

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

jeudi 10 mars 2011

Page 57: Auditeur statique PHP

Fonctionnement

Token

izeurAuditeur Affichage

Analyzer

jeudi 10 mars 2011

Page 58: Auditeur statique PHP

Evolution

Token

izeurAuditeur

Analyzer

•Web

•XML

•ODS

•PHPCodeBrowser

•Sonar

jeudi 10 mars 2011

Page 59: Auditeur statique PHP

Règles•Sécurité

•Recommandations (groupe PHP, CMS..)

•Conventions maison

•Migration PHP 5.3

•Performances

•Motif de conceptions

jeudi 10 mars 2011

Page 61: Auditeur statique PHP

jeudi 10 mars 2011