25
Jean-Marie Renouard LightPath 2014©

Sécurité et Quaité de code PHP

Embed Size (px)

DESCRIPTION

Présentation de la qualité et de sécurité avec PHP 5

Citation preview

Page 1: Sécurité et Quaité de code PHP

Jean-Marie Renouard

LightPath 2014©

Page 2: Sécurité et Quaité de code PHP

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

Page 3: Sécurité et Quaité de code PHP

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

Page 4: Sécurité et Quaité de code PHP
Page 5: 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]);

}

}

Page 6: Sécurité et Quaité de code PHP
Page 7: 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

Page 8: Sécurité et Quaité de code PHP
Page 9: 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

Page 10: Sécurité et Quaité de code PHP

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

) ) {…}

Page 11: Sécurité et Quaité de code PHP

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

Page 12: Sécurité et Quaité de code PHP
Page 13: Sécurité et Quaité de code PHP

Retrait de balises HTML: strip_tags

Encodage html: htmlentities

Encode url: urlencode

Page 14: Sécurité et Quaité de code PHP

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

Page 15: Sécurité et Quaité de code PHP
Page 16: 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 »

Page 17: Sécurité et Quaité de code PHP
Page 18: 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

Page 19: Sécurité et Quaité de code PHP
Page 20: 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

Page 22: Sécurité et Quaité de code PHP
Page 23: 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

Page 24: Sécurité et Quaité de code PHP

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

Page 25: Sécurité et Quaité de code PHP

LightPath: ◦ Société de conseil et d’ingénierie

◦ Formations, Conseil, Audit et mise en œuvre

[email protected]

Jean-Marie RENOUARD ◦ [email protected]

◦ Twitter: @jmrenouard

◦ http://www.jmrenouard.fr

LightPath 2014© - http://www.jmrenouard.fr 25