SlideShare une entreprise Scribd logo
Jean-Marie Renouard 
LightPath 2014©
Le logo PHP est du domaine public 
http://commons.wikimedia.org/wiki/File:PHP-logo.svg 
Ce document est licencié sous licence 
◦Attribution-NonCommercial-ShareAlike 
◦CC BY-NC-SA 
Plus de détails: 
http://creativecommons.org/licenses/by-nc-sa/3.0/fr/ 
LightPath 2014© - http://www.jmrenouard.fr 
2
Les paramètres entrée GET et POST 
Entêtes HTTP et réponses HTTP 
Sécurité des formats de données 
Sécurité du contenu des données 
Tests unitaires 
Uniformité du code 
Documentation automatique 
Vérification des erreurs de sémantiques
Sécurité et Quaité de code PHP
Élimination des paramètres inutiles 
$allow=array(‘nom ’, ‘comments’); 
foreach ($_POST as $key => $val) { 
if (! in_array($allow, $key) { 
unset($_POST[$key]); 
} 
}
Sécurité et Quaité de code PHP
Retrait de toutes balises type META 
Souvent présent dans les CMS (Joomla) 
Retrait de toute information dans le code HTML 
◦Nom du produit 
◦Numéro de version 
◦Souvent en commentaire
Sécurité et Quaité de code PHP
Vérification de la taille des chaînes 
◦if (count($_POST[‘nom’] > 255) { …} 
Vérification du type 
◦is_array, is_bool, is_callable, is_double, is_float, is_int, is_integer, is_long, is_null, isset, is_numéric, is_object, is_real, is_resource, is_scalar, is_string
Vérification format email: 
◦if (!eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9- ]+(.[a-z0-9-]+)*(.[a-z]{2,3})$", $email)){ …} 
Vérification d’une date 
◦If (!preg_match( '`^d{1,2}/d{1,2}/d{4}$`' , $value ) ) {…}
La fonction filter_var permet la validation de certains formats: 
◦FILTER_VALIDATE_BOOLEAN 
◦FILTER_VALIDATE_EMAIL 
◦FILTER_VALIDATE_FLOAT 
◦FILTER_VALIDATE_INT 
◦FILTER_VALIDATE_IP 
◦FILTER_VALIDATE_REGEXP 
◦FILTER_VALIDATE_URL
Sécurité et Quaité de code PHP
Retrait de balises HTML: strip_tags 
Encodage html: htmlentities 
Encode url: urlencode
La fonction filter_var permet l’épuration 
◦FILTER_SANITIZE_EMAIL 
◦FILTER_SANITIZE_ENCODED 
◦FILTER_SANITIZE_MAGIC_QUOTES 
◦FILTER_SANITIZE_NUMBER_FLOAT 
◦FILTER_SANITIZE_NUMBER_INT 
◦FILTER_SANITIZE_SPECIAL_CHARS 
◦FILTER_SANITIZE_STRING 
◦FILTER_SANITIZE_STRIPPED 
◦FILTER_SANITIZE_URL 
◦FILTER_UNSAFE_RAW
Sécurité et Quaité de code PHP
Écriture de classe de tests 
Héritage de PHPUnit_Framework_TestCase 
Toutes les fonctions commençant par testXXX sont des tests unitaires. 
Utilisation d’assertion ($this->assertXXX()) 
Important d’avoir une bonne couverture de test du code. 
>80% est un minimum. 
Éviter le syndrome du « bug de la dernière fois »
Sécurité et Quaité de code PHP
Application systématique du reformatage 
Possibilité de reformatage d’un ensemble de fichiers 
Autorisation d’une meilleur coordination d’équipe
Sécurité et Quaité de code PHP
Commentaires annotés systématique 
◦Toutes les fonctions 
◦Toutes les classes 
◦Toutes les méthodes 
◦Toutes les attributs 
Prévision d’annotation(@) standard 
Génération automatique de la doc API 
◦phpDocumentor
30 annotations 
http://manual.phpdoc.org/HTMLSmartyConverter/PHP/phpDocumentor/tutorial_tags.pkg. html 
Possibilité de documentation rapide
Sécurité et Quaité de code PHP
Toujours activé par défaut 
Activation du maximum de détection. 
Corriger une erreur => apprendre un bon geste
Définition d’un tâche à faire dans le code 
◦//@todo 
◦//TODO 
Quelque chose qui ne marche pas bien 
◦//FIXME 
Indication d’un hack sauvage de code 
◦//HACK 
Autres notes: 
◦//XXX
LightPath: 
◦Société de conseil et d’ingénierie 
◦Formations, Conseil, Audit et mise en oeuvre 
◦jmrenouard@lightpath.fr 
Jean-Marie RENOUARD 
◦jmrenouard@gmail.com 
◦Twitter: @jmrenouard 
◦http://www.jmrenouard.fr 
LightPath 2014© - http://www.jmrenouard.fr 
25

Contenu connexe

PDF
Configuration PHP5
PDF
Gestion de formulaires en PHP
PDF
Syntaxe du langage PHP
PDF
Client base de données en PHP5
PDF
Le client HTTP PHP5
PDF
PHP5 et les fichiers
PDF
PHP 5 et la programmation objet
PDF
SQL et MySQL
Configuration PHP5
Gestion de formulaires en PHP
Syntaxe du langage PHP
Client base de données en PHP5
Le client HTTP PHP5
PHP5 et les fichiers
PHP 5 et la programmation objet
SQL et MySQL

Tendances (19)

PDF
Email et PHP5
PDF
Présentation de PHP
PDF
MVC / Frameworks PHP
PDF
Fichier XML et PHP5
PDF
Le client FTP de PHP5
PDF
Javascript et JQuery
PDF
Les structures de données PHP5
PPTX
php2 : formulaire-session-PDO
PDF
Trucs et astuces PHP et MySQL
PDF
Php 2 - Approfondissement MySQL, PDO et MVC
PDF
Bases de PHP - Partie 1
PPTX
Symfony2 - Un Framework PHP 5 Performant
PPTX
Introduction au Jquery
PDF
Programmation orientée objet en PHP 5
PPTX
Php & My Sql
PDF
Open close principle, on a dit étendre, pas extends !
PPT
PHP5 - POO
PPT
Soutenance Zend Framework vs Symfony
PPT
Cours php
Email et PHP5
Présentation de PHP
MVC / Frameworks PHP
Fichier XML et PHP5
Le client FTP de PHP5
Javascript et JQuery
Les structures de données PHP5
php2 : formulaire-session-PDO
Trucs et astuces PHP et MySQL
Php 2 - Approfondissement MySQL, PDO et MVC
Bases de PHP - Partie 1
Symfony2 - Un Framework PHP 5 Performant
Introduction au Jquery
Programmation orientée objet en PHP 5
Php & My Sql
Open close principle, on a dit étendre, pas extends !
PHP5 - POO
Soutenance Zend Framework vs Symfony
Cours php
Publicité

En vedette (8)

PDF
Manuel de sécurisation d'un serveur Linux
PDF
Ssh cookbook
PPT
Structure de données en PHP
PDF
OWASP TOP 10 Proactive
PDF
Geneva Application Security Forum: Vers une authentification plus forte dans ...
PPTX
Owasp top 10 security threats
PPTX
[Wroclaw #5] OWASP Projects: beyond Top 10
PPTX
Présentation de Node.js
Manuel de sécurisation d'un serveur Linux
Ssh cookbook
Structure de données en PHP
OWASP TOP 10 Proactive
Geneva Application Security Forum: Vers une authentification plus forte dans ...
Owasp top 10 security threats
[Wroclaw #5] OWASP Projects: beyond Top 10
Présentation de Node.js
Publicité

Similaire à Sécurité et Quaité de code PHP (20)

PDF
Comment relire du code pourri sans se fatiguer
PDF
Service WEB de type REST avec Java
PDF
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
ODP
Tester les applications Zend Framework
PDF
Des tests modernes pour Drupal
PPTX
Webinaire : sécurité informatique sur le web - Jérôme Thémée
ZIP
Epitech securite-2012.key
PDF
(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)
PDF
(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)
PDF
AFUP Aix/Marseille - 16 mai 2017 - Open API
PDF
Tapestry
PDF
PHPTour-2011-PHP_Extensions
PPTX
Validation de code Puppet avec les Git Hook, Code défensif
PDF
Cyjsec formation-securite-java
PDF
PHP #4 : sessions & cookies
PPTX
Drupal 8, symfony
PPTX
Meetup angular rshop
PDF
Concevoir, développer et sécuriser des micro-services avec Spring Boot
PPTX
Automatisation des tests - objectifs et concepts - partie 2
PDF
Octo Technology - Refcard Tests Web front-end
Comment relire du code pourri sans se fatiguer
Service WEB de type REST avec Java
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Tester les applications Zend Framework
Des tests modernes pour Drupal
Webinaire : sécurité informatique sur le web - Jérôme Thémée
Epitech securite-2012.key
(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)
(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)
AFUP Aix/Marseille - 16 mai 2017 - Open API
Tapestry
PHPTour-2011-PHP_Extensions
Validation de code Puppet avec les Git Hook, Code défensif
Cyjsec formation-securite-java
PHP #4 : sessions & cookies
Drupal 8, symfony
Meetup angular rshop
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Automatisation des tests - objectifs et concepts - partie 2
Octo Technology - Refcard Tests Web front-end

Dernier (17)

PPTX
Logique séquentielle : les fondamentaux
PDF
Proposition de contenu pouvant résoudre les problèmes détectés à partir des é...
PDF
Expansion du Réseau de Gazoducs de Gaz Naturel au Brésil _ Analyse Technique ...
PDF
Regles sur la gestion de l’Eclairage public
PDF
TP de La Masse Volumique apparente et absolue
PDF
Arouna Toure - Senior Ingénieur Logiciel Et Chef De Produit
PPTX
UMAPON Cours de traitement des minerais 2.pptx
PPT
620118449-1-Introduction-de-La-MOCN.pptT
PDF
FAQ_FORAGE_EAU_SUNRISE_ENGINEERING_GROUP_SARL2025.pdf
PPTX
mon_expose_de_geophysique_disposotif_de_wener.pptx
PDF
Visite de chantier – Projet de Polyclinique à Laghouat
PPTX
CH1-RMELLOULI-Données des problèmes d'ordonnancement de la production.pptx
PDF
TP L’analyse granulométrique par tamisage
PDF
CHAPITRE 3 Typologie des réseaux [Enregistrement automatique] 4.pdf
PPTX
Introduction aux Systèmes temps réel.pptx
PPTX
Chapitre7-java------------------ Exception.pptx
PPTX
COURS DE PROSPECTION MINIERE UTMSIRI - Copie.pptx
Logique séquentielle : les fondamentaux
Proposition de contenu pouvant résoudre les problèmes détectés à partir des é...
Expansion du Réseau de Gazoducs de Gaz Naturel au Brésil _ Analyse Technique ...
Regles sur la gestion de l’Eclairage public
TP de La Masse Volumique apparente et absolue
Arouna Toure - Senior Ingénieur Logiciel Et Chef De Produit
UMAPON Cours de traitement des minerais 2.pptx
620118449-1-Introduction-de-La-MOCN.pptT
FAQ_FORAGE_EAU_SUNRISE_ENGINEERING_GROUP_SARL2025.pdf
mon_expose_de_geophysique_disposotif_de_wener.pptx
Visite de chantier – Projet de Polyclinique à Laghouat
CH1-RMELLOULI-Données des problèmes d'ordonnancement de la production.pptx
TP L’analyse granulométrique par tamisage
CHAPITRE 3 Typologie des réseaux [Enregistrement automatique] 4.pdf
Introduction aux Systèmes temps réel.pptx
Chapitre7-java------------------ Exception.pptx
COURS DE PROSPECTION MINIERE UTMSIRI - Copie.pptx

Sécurité et Quaité de code PHP

  • 2. Le logo PHP est du domaine public http://commons.wikimedia.org/wiki/File:PHP-logo.svg Ce document est licencié sous licence ◦Attribution-NonCommercial-ShareAlike ◦CC BY-NC-SA Plus de détails: http://creativecommons.org/licenses/by-nc-sa/3.0/fr/ LightPath 2014© - http://www.jmrenouard.fr 2
  • 3. Les paramètres entrée GET et POST Entêtes HTTP et réponses HTTP Sécurité des formats de données Sécurité du contenu des données Tests unitaires Uniformité du code Documentation automatique Vérification des erreurs de sémantiques
  • 5. Élimination des paramètres inutiles $allow=array(‘nom ’, ‘comments’); foreach ($_POST as $key => $val) { if (! in_array($allow, $key) { unset($_POST[$key]); } }
  • 7. Retrait de toutes balises type META Souvent présent dans les CMS (Joomla) Retrait de toute information dans le code HTML ◦Nom du produit ◦Numéro de version ◦Souvent en commentaire
  • 9. Vérification de la taille des chaînes ◦if (count($_POST[‘nom’] > 255) { …} Vérification du type ◦is_array, is_bool, is_callable, is_double, is_float, is_int, is_integer, is_long, is_null, isset, is_numéric, is_object, is_real, is_resource, is_scalar, is_string
  • 10. Vérification format email: ◦if (!eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9- ]+(.[a-z0-9-]+)*(.[a-z]{2,3})$", $email)){ …} Vérification d’une date ◦If (!preg_match( '`^d{1,2}/d{1,2}/d{4}$`' , $value ) ) {…}
  • 11. La fonction filter_var permet la validation de certains formats: ◦FILTER_VALIDATE_BOOLEAN ◦FILTER_VALIDATE_EMAIL ◦FILTER_VALIDATE_FLOAT ◦FILTER_VALIDATE_INT ◦FILTER_VALIDATE_IP ◦FILTER_VALIDATE_REGEXP ◦FILTER_VALIDATE_URL
  • 13. Retrait de balises HTML: strip_tags Encodage html: htmlentities Encode url: urlencode
  • 14. La fonction filter_var permet l’épuration ◦FILTER_SANITIZE_EMAIL ◦FILTER_SANITIZE_ENCODED ◦FILTER_SANITIZE_MAGIC_QUOTES ◦FILTER_SANITIZE_NUMBER_FLOAT ◦FILTER_SANITIZE_NUMBER_INT ◦FILTER_SANITIZE_SPECIAL_CHARS ◦FILTER_SANITIZE_STRING ◦FILTER_SANITIZE_STRIPPED ◦FILTER_SANITIZE_URL ◦FILTER_UNSAFE_RAW
  • 16. Écriture de classe de tests Héritage de PHPUnit_Framework_TestCase Toutes les fonctions commençant par testXXX sont des tests unitaires. Utilisation d’assertion ($this->assertXXX()) Important d’avoir une bonne couverture de test du code. >80% est un minimum. Éviter le syndrome du « bug de la dernière fois »
  • 18. Application systématique du reformatage Possibilité de reformatage d’un ensemble de fichiers Autorisation d’une meilleur coordination d’équipe
  • 20. Commentaires annotés systématique ◦Toutes les fonctions ◦Toutes les classes ◦Toutes les méthodes ◦Toutes les attributs Prévision d’annotation(@) standard Génération automatique de la doc API ◦phpDocumentor
  • 23. Toujours activé par défaut Activation du maximum de détection. Corriger une erreur => apprendre un bon geste
  • 24. Définition d’un tâche à faire dans le code ◦//@todo ◦//TODO Quelque chose qui ne marche pas bien ◦//FIXME Indication d’un hack sauvage de code ◦//HACK Autres notes: ◦//XXX
  • 25. LightPath: ◦Société de conseil et d’ingénierie ◦Formations, Conseil, Audit et mise en oeuvre ◦jmrenouard@lightpath.fr Jean-Marie RENOUARD ◦jmrenouard@gmail.com ◦Twitter: @jmrenouard ◦http://www.jmrenouard.fr LightPath 2014© - http://www.jmrenouard.fr 25