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

Tendances

Email et PHP5
Email et PHP5Email et PHP5
Email et PHP5
Jean-Marie Renouard
 
Présentation de PHP
Présentation de PHPPrésentation de PHP
Présentation de PHP
Jean-Marie Renouard
 
MVC / Frameworks PHP
MVC / Frameworks PHPMVC / Frameworks PHP
MVC / Frameworks PHP
Jean-Marie Renouard
 
Fichier XML et PHP5
Fichier XML et PHP5Fichier XML et PHP5
Fichier XML et PHP5
Jean-Marie Renouard
 
Le client FTP de PHP5
Le client FTP de PHP5Le client FTP de PHP5
Le client FTP de PHP5
Jean-Marie Renouard
 
Javascript et JQuery
Javascript et JQueryJavascript et JQuery
Javascript et JQuery
Jean-Marie Renouard
 
Les structures de données PHP5
Les structures de données PHP5Les structures de données PHP5
Les structures de données PHP5
Jean-Marie Renouard
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
Abdoulaye Dieng
 
Trucs et astuces PHP et MySQL
Trucs et astuces PHP et MySQLTrucs et astuces PHP et MySQL
Trucs et astuces PHP et MySQL
Damien Seguy
 
Php 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVCPhp 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVC
Pierre Faure
 
Bases de PHP - Partie 1
Bases de PHP - Partie 1Bases de PHP - Partie 1
Bases de PHP - Partie 1
Régis Lutter
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
Hugo Hamon
 
Introduction au Jquery
Introduction au JqueryIntroduction au Jquery
Introduction au Jquery
Abdoulaye Dieng
 
Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5
Kristen Le Liboux
 
Php & My Sql
Php & My SqlPhp & My Sql
Php & My Sql
guest6c050e
 
Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !
Engineor
 
PHP5 - POO
PHP5 - POOPHP5 - POO
PHP5 - POO
mazenovi
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs Symfony
Vincent Composieux
 
Cours php
Cours phpCours php
Cours php
csskaled
 

Tendances (19)

Email et PHP5
Email et PHP5Email et PHP5
Email et PHP5
 
Présentation de PHP
Présentation de PHPPrésentation de PHP
Présentation de PHP
 
MVC / Frameworks PHP
MVC / Frameworks PHPMVC / Frameworks PHP
MVC / Frameworks PHP
 
Fichier XML et PHP5
Fichier XML et PHP5Fichier XML et PHP5
Fichier XML et PHP5
 
Le client FTP de PHP5
Le client FTP de PHP5Le client FTP de PHP5
Le client FTP de PHP5
 
Javascript et JQuery
Javascript et JQueryJavascript et JQuery
Javascript et JQuery
 
Les structures de données PHP5
Les structures de données PHP5Les structures de données PHP5
Les structures de données PHP5
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
 
Trucs et astuces PHP et MySQL
Trucs et astuces PHP et MySQLTrucs et astuces PHP et MySQL
Trucs et astuces PHP et MySQL
 
Php 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVCPhp 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVC
 
Bases de PHP - Partie 1
Bases de PHP - Partie 1Bases de PHP - Partie 1
Bases de PHP - Partie 1
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
 
Introduction au Jquery
Introduction au JqueryIntroduction au Jquery
Introduction au Jquery
 
Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5
 
Php & My Sql
Php & My SqlPhp & My Sql
Php & My Sql
 
Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !
 
PHP5 - POO
PHP5 - POOPHP5 - POO
PHP5 - POO
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs Symfony
 
Cours php
Cours phpCours php
Cours php
 

En vedette

Manuel de sécurisation d'un serveur Linux
Manuel de sécurisation d'un serveur LinuxManuel de sécurisation d'un serveur Linux
Manuel de sécurisation d'un serveur Linux
Jean-Marie Renouard
 
Ssh cookbook
Ssh cookbookSsh cookbook
Ssh cookbook
Jean-Marie Renouard
 
Structure de données en PHP
Structure de données en PHPStructure de données en PHP
Structure de données en PHP
Jean-Marie Renouard
 
OWASP TOP 10 Proactive
OWASP TOP 10 ProactiveOWASP TOP 10 Proactive
OWASP TOP 10 Proactive
Abdessamad TEMMAR
 
Geneva Application Security Forum: Vers une authentification plus forte dans ...
Geneva Application Security Forum: Vers une authentification plus forte dans ...Geneva Application Security Forum: Vers une authentification plus forte dans ...
Geneva Application Security Forum: Vers une authentification plus forte dans ...
Sylvain Maret
 
Owasp top 10 security threats
Owasp top 10 security threatsOwasp top 10 security threats
Owasp top 10 security threats
Vishal Kumar
 
[Wroclaw #5] OWASP Projects: beyond Top 10
[Wroclaw #5] OWASP Projects: beyond Top 10[Wroclaw #5] OWASP Projects: beyond Top 10
[Wroclaw #5] OWASP Projects: beyond Top 10
OWASP
 
Présentation de Node.js
Présentation de Node.jsPrésentation de Node.js
Présentation de Node.js
Mickael Couzinet
 

En vedette (8)

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

Similaire à Sécurité et Quaité de code PHP

Comment relire du code pourri sans se fatiguer
Comment relire du code pourri sans se fatiguerComment relire du code pourri sans se fatiguer
Comment relire du code pourri sans se fatiguer
Damien Seguy
 
Service WEB de type REST avec Java
Service WEB de type REST avec JavaService WEB de type REST avec Java
Service WEB de type REST avec Java
Francois ANDRE
 
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
fdussert
 
Tester les applications Zend Framework
Tester les applications Zend FrameworkTester les applications Zend Framework
Tester les applications Zend Framework
Mickael Perraud
 
Des tests modernes pour Drupal
Des tests modernes pour DrupalDes tests modernes pour Drupal
Des tests modernes pour Drupal
Christophe Villeneuve
 
Webinaire : sécurité informatique sur le web - Jérôme Thémée
Webinaire : sécurité informatique sur le web - Jérôme ThéméeWebinaire : sécurité informatique sur le web - Jérôme Thémée
Webinaire : sécurité informatique sur le web - Jérôme Thémée
Marie Tapia
 
Epitech securite-2012.key
Epitech securite-2012.keyEpitech securite-2012.key
Epitech securite-2012.key
Damien Seguy
 
(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)
(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)
(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)
Microsoft Décideurs IT
 
(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)
(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)
(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)
Microsoft Technet France
 
AFUP Aix/Marseille - 16 mai 2017 - Open API
AFUP Aix/Marseille - 16 mai 2017 - Open APIAFUP Aix/Marseille - 16 mai 2017 - Open API
AFUP Aix/Marseille - 16 mai 2017 - Open API
Romain Cambien
 
PHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_ExtensionsPHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_Extensions
julien pauli
 
Validation de code Puppet avec les Git Hook, Code défensif
Validation de code Puppet avec les Git Hook, Code défensifValidation de code Puppet avec les Git Hook, Code défensif
Validation de code Puppet avec les Git Hook, Code défensif
julien_abbe
 
Cyjsec formation-securite-java
Cyjsec formation-securite-javaCyjsec formation-securite-java
Cyjsec formation-securite-java
CERTyou Formation
 
PHP #4 : sessions & cookies
PHP #4 : sessions & cookiesPHP #4 : sessions & cookies
PHP #4 : sessions & cookies
Jean Michel
 
Drupal 8, symfony
Drupal 8, symfonyDrupal 8, symfony
Drupal 8, symfony
jeUXdiCode
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring Boot
DNG Consulting
 
Automatisation des tests - objectifs et concepts - partie 2
Automatisation des tests  - objectifs et concepts - partie 2Automatisation des tests  - objectifs et concepts - partie 2
Automatisation des tests - objectifs et concepts - partie 2
Christophe Rochefolle
 
Octo RefCard test front-end
Octo RefCard test front-endOcto RefCard test front-end
Octo RefCard test front-end
Clément Dubois
 

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

Comment relire du code pourri sans se fatiguer
Comment relire du code pourri sans se fatiguerComment relire du code pourri sans se fatiguer
Comment relire du code pourri sans se fatiguer
 
Service WEB de type REST avec Java
Service WEB de type REST avec JavaService WEB de type REST avec Java
Service WEB de type REST avec Java
 
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
 
Tester les applications Zend Framework
Tester les applications Zend FrameworkTester les applications Zend Framework
Tester les applications Zend Framework
 
Des tests modernes pour Drupal
Des tests modernes pour DrupalDes tests modernes pour Drupal
Des tests modernes pour Drupal
 
Webinaire : sécurité informatique sur le web - Jérôme Thémée
Webinaire : sécurité informatique sur le web - Jérôme ThéméeWebinaire : sécurité informatique sur le web - Jérôme Thémée
Webinaire : sécurité informatique sur le web - Jérôme Thémée
 
Epitech securite-2012.key
Epitech securite-2012.keyEpitech securite-2012.key
Epitech securite-2012.key
 
(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)
(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)
(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)
 
(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)
(Azure) Active Directory + BYOD = tranquillité d’esprit, chiche ! (2nde Partie)(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
AFUP Aix/Marseille - 16 mai 2017 - Open APIAFUP Aix/Marseille - 16 mai 2017 - Open API
AFUP Aix/Marseille - 16 mai 2017 - Open API
 
Tapestry
TapestryTapestry
Tapestry
 
PHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_ExtensionsPHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_Extensions
 
Validation de code Puppet avec les Git Hook, Code défensif
Validation de code Puppet avec les Git Hook, Code défensifValidation de code Puppet avec les Git Hook, Code défensif
Validation de code Puppet avec les Git Hook, Code défensif
 
Cyjsec formation-securite-java
Cyjsec formation-securite-javaCyjsec formation-securite-java
Cyjsec formation-securite-java
 
PHP #4 : sessions & cookies
PHP #4 : sessions & cookiesPHP #4 : sessions & cookies
PHP #4 : sessions & cookies
 
Drupal 8, symfony
Drupal 8, symfonyDrupal 8, symfony
Drupal 8, symfony
 
Meetup angular rshop
Meetup angular rshopMeetup angular rshop
Meetup angular rshop
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring Boot
 
Automatisation des tests - objectifs et concepts - partie 2
Automatisation des tests  - objectifs et concepts - partie 2Automatisation des tests  - objectifs et concepts - partie 2
Automatisation des tests - objectifs et concepts - partie 2
 
Octo RefCard test front-end
Octo RefCard test front-endOcto RefCard test front-end
Octo RefCard test front-end
 

Dernier

Webinaire BL 28_06_02_Consommation Energie.pdf
Webinaire BL 28_06_02_Consommation Energie.pdfWebinaire BL 28_06_02_Consommation Energie.pdf
Webinaire BL 28_06_02_Consommation Energie.pdf
Institut de l'Elevage - Idele
 
cours-sur-les-stations-de-pompageen génie civil.pdf
cours-sur-les-stations-de-pompageen génie civil.pdfcours-sur-les-stations-de-pompageen génie civil.pdf
cours-sur-les-stations-de-pompageen génie civil.pdf
afigloria194
 
Shimla Girls call Service 000XX00000 Provide Best And Top Girl Service And No...
Shimla Girls call Service 000XX00000 Provide Best And Top Girl Service And No...Shimla Girls call Service 000XX00000 Provide Best And Top Girl Service And No...
Shimla Girls call Service 000XX00000 Provide Best And Top Girl Service And No...
manalishivani8
 
Webinaire BL 28_06_01_robots de traite.pdf
Webinaire BL 28_06_01_robots de traite.pdfWebinaire BL 28_06_01_robots de traite.pdf
Webinaire BL 28_06_01_robots de traite.pdf
Institut de l'Elevage - Idele
 
Présentation Mémoire Cybersecurity .pptx
Présentation Mémoire Cybersecurity .pptxPrésentation Mémoire Cybersecurity .pptx
Présentation Mémoire Cybersecurity .pptx
KODJO10
 
Webinaire BL 28_06_03_Transmissibilité.pdf
Webinaire BL 28_06_03_Transmissibilité.pdfWebinaire BL 28_06_03_Transmissibilité.pdf
Webinaire BL 28_06_03_Transmissibilité.pdf
Institut de l'Elevage - Idele
 

Dernier (6)

Webinaire BL 28_06_02_Consommation Energie.pdf
Webinaire BL 28_06_02_Consommation Energie.pdfWebinaire BL 28_06_02_Consommation Energie.pdf
Webinaire BL 28_06_02_Consommation Energie.pdf
 
cours-sur-les-stations-de-pompageen génie civil.pdf
cours-sur-les-stations-de-pompageen génie civil.pdfcours-sur-les-stations-de-pompageen génie civil.pdf
cours-sur-les-stations-de-pompageen génie civil.pdf
 
Shimla Girls call Service 000XX00000 Provide Best And Top Girl Service And No...
Shimla Girls call Service 000XX00000 Provide Best And Top Girl Service And No...Shimla Girls call Service 000XX00000 Provide Best And Top Girl Service And No...
Shimla Girls call Service 000XX00000 Provide Best And Top Girl Service And No...
 
Webinaire BL 28_06_01_robots de traite.pdf
Webinaire BL 28_06_01_robots de traite.pdfWebinaire BL 28_06_01_robots de traite.pdf
Webinaire BL 28_06_01_robots de traite.pdf
 
Présentation Mémoire Cybersecurity .pptx
Présentation Mémoire Cybersecurity .pptxPrésentation Mémoire Cybersecurity .pptx
Présentation Mémoire Cybersecurity .pptx
 
Webinaire BL 28_06_03_Transmissibilité.pdf
Webinaire BL 28_06_03_Transmissibilité.pdfWebinaire BL 28_06_03_Transmissibilité.pdf
Webinaire BL 28_06_03_Transmissibilité.pdf
 

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