Sécurité et Quaité de code PHP
-
Upload
jean-marie-renouard -
Category
Engineering
-
view
181 -
download
5
description
Transcript of Sécurité et Quaité de code PHP
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
30 annotations
http://manual.phpdoc.org/HTMLSmartyConverter/PHP/phpDocumentor/tutorial_tags.pkg.html
Possibilité de documentation rapide
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
Jean-Marie RENOUARD ◦ [email protected]
◦ Twitter: @jmrenouard
◦ http://www.jmrenouard.fr
LightPath 2014© - http://www.jmrenouard.fr 25