5. 3 types
Audit de sécurité
Audit de performances
Audit de qualité de code
6. Audit de code PHP
Entrevue avec les développeurs : 1 jour
Analyse boîte noire : 1 jour
Analyse à code ouvert : 2 jours
Rapport et revue : 1 jour
7. Entrevue des développeurs
Qui : se présenter
Quoi : que fait cette
application?
Comment : comment est
organisé le code?
8. Que rechercher?
Ce qui est dit
Trop précis, trop général
Ce qui n’est pas dit
Les omissions
Ne pas hésiter à faire répéter
Reposer la question sous une autre forme
9. Analyse boîte noire
Test depuis l’extérieur
Inclus l’application dans son ensemble
Inclus l’environnement : moteurs de recherche,
Résultats spectaculaires
AUTOMATISEZ!
Outils : skipfish, rats, nikto, Wapiti, PHP
10. Code ouvert
Quels sont les points d’entrée?
Sont-ils accessibles? Protégés?
Comment exploiter ce problème?
16. Evals
◦ eval('$retour=$GLOBALS["'.$matches[1].'"];')
◦ Variable variables
◦ eval($contenu_thjipk);
◦ eval($contents_essai);
◦ Le contenu est lu dans une variable, puis exécuté : un include?
◦ eval('$hexdtime = "'.$hexdtime.'";')
◦ Un moyen détourné pour transformer une chaîne en entier
◦ eval('$retour2.= '.var_dump($recept->erreur).';')
◦ Ceci est complètement inutile....
17. Evals
◦ eval('$retour=$GLOBALS["'.$matches[1].'"];')
◦ Variable variables
◦ eval($contenu_thjipk);
◦ eval($contents_essai);
◦ Le contenu est lu dans une variable, puis exécuté : un include?
◦ eval('$hexdtime = "'.$hexdtime.'";')
◦ Un moyen détourné pour transformer une chaîne en entier
◦ eval('$retour2.= '.var_dump($recept->erreur).';')
◦ Ceci est complètement inutile....
18. Evals
◦ eval('$retour=$GLOBALS["'.$matches[1].'"];')
◦ Variable variables
◦ eval($contenu_thjipk);
◦ eval($contents_essai);
◦ Le contenu est lu dans une variable, puis exécuté : un include?
◦ eval('$hexdtime = "'.$hexdtime.'";')
◦ Un moyen détourné pour transformer une chaîne en entier
◦ eval('$retour2.= '.var_dump($recept->erreur).';')
◦ Ceci est complètement inutile....
19. Evals
◦ eval('$retour=$GLOBALS["'.$matches[1].'"];')
◦ Variable variables
◦ eval($contenu_thjipk);
◦ eval($contents_essai);
◦ Le contenu est lu dans une variable, puis exécuté : un include?
◦ eval('$hexdtime = "'.$hexdtime.'";')
◦ Un moyen détourné pour transformer une chaîne en entier
◦ eval('$retour2.= '.var_dump($recept->erreur).';')
◦ Ceci est complètement inutile....
20. Evals
◦ eval('$retour=$GLOBALS["'.$matches[1].'"];')
◦ Variable variables
◦ eval($contenu_thjipk);
◦ eval($contents_essai);
◦ Le contenu est lu dans une variable, puis exécuté : un include?
◦ eval('$hexdtime = "'.$hexdtime.'";')
◦ Un moyen détourné pour transformer une chaîne en entier
◦ eval('$retour2.= '.var_dump($recept->erreur).';')
◦ Ceci est complètement inutile....
21. Vérifier le code
Erreur en une ligne
Parfois, une seule ligne est suffisante
Parfois, non
Il faut prendre en compte le contexte
Lire le code à l’envers
22. Audit statistiques
Extraire un type d’information
Relire la liste hors de contexte
Sert de point d’entrée pour plus de questions
23. Variables
6883 variables différentes
Toutes les variables possibles en une lettre
32 chars : $cache_maxsize_UTF8StringToArray
Plus utilisée : $i (2586 fois)
$_1904, $samedi, $dummy, $sss, 19 $unknowns
711 variables utilisées une seule fois
24. Rapport
Résumé exécutif
3 paragraphes, simples à lire
Résumé des problèmes rencontrés
Details et explications
Annexes
25. Rapport
Indice Qualité Correctif
Variables courtes Basse Compliqué
Trop de méthodes Moyen Moyen
Trop de
Fort Simple
dépendances
Inclusions Basse Simple
26. Détails
Titre
Exemple dans le code, explication
Suggestion de corrections
Limitations
Liste des occurrences
Ou un moyen de les trouver
27. Travail d’équipe
L’audit intervient toujours après le codage
Une fois
Si nécessaire
Régulièrement
Continuement
28. Mantras PHP
Listez vos mantra
Choisissez les 5 règles les plus importantes
Imprimez-le, faites les réciter
29. Audits croisés
Faîtes des binômes
Chaque développeur doit relire le code de l’autre
À la lumière des mantras
Processus très léger, agile
Capable de passer