Sécurité et Quaité de code PHP

Preview:

DESCRIPTION

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

Citation preview

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

Élimination des paramètres inutiles

$allow=array(‘nom ’, ‘comments’);

foreach ($_POST as $key => $val) {

if (! in_array($allow, $key) {

unset($_POST[$key]);

}

}

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

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

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

É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 »

Application systématique du reformatage

Possibilité de reformatage d’un ensemble de fichiers

Autorisation d’une meilleur coordination d’équipe

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

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 œuvre

◦ jmrenouard@lightpath.fr

Jean-Marie RENOUARD ◦ jmrenouard@gmail.com

◦ Twitter: @jmrenouard

◦ http://www.jmrenouard.fr

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

Recommended