Sécurité et Quaité de code PHP
-
Upload
jean-marie-renouard -
Category
Engineering
-
view
180 -
download
5
description
Transcript of Sécurité et Quaité de code PHP
![Page 1: Sécurité et Quaité de code PHP](https://reader034.fdocument.pub/reader034/viewer/2022052316/559628091a28ab865a8b46e4/html5/thumbnails/1.jpg)
Jean-Marie Renouard
LightPath 2014©
![Page 2: Sécurité et Quaité de code PHP](https://reader034.fdocument.pub/reader034/viewer/2022052316/559628091a28ab865a8b46e4/html5/thumbnails/2.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052316/559628091a28ab865a8b46e4/html5/thumbnails/3.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052316/559628091a28ab865a8b46e4/html5/thumbnails/4.jpg)
![Page 5: Sécurité et Quaité de code PHP](https://reader034.fdocument.pub/reader034/viewer/2022052316/559628091a28ab865a8b46e4/html5/thumbnails/5.jpg)
É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](https://reader034.fdocument.pub/reader034/viewer/2022052316/559628091a28ab865a8b46e4/html5/thumbnails/6.jpg)
![Page 7: Sécurité et Quaité de code PHP](https://reader034.fdocument.pub/reader034/viewer/2022052316/559628091a28ab865a8b46e4/html5/thumbnails/7.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052316/559628091a28ab865a8b46e4/html5/thumbnails/8.jpg)
![Page 9: Sécurité et Quaité de code PHP](https://reader034.fdocument.pub/reader034/viewer/2022052316/559628091a28ab865a8b46e4/html5/thumbnails/9.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052316/559628091a28ab865a8b46e4/html5/thumbnails/10.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052316/559628091a28ab865a8b46e4/html5/thumbnails/11.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052316/559628091a28ab865a8b46e4/html5/thumbnails/12.jpg)
![Page 13: Sécurité et Quaité de code PHP](https://reader034.fdocument.pub/reader034/viewer/2022052316/559628091a28ab865a8b46e4/html5/thumbnails/13.jpg)
Retrait de balises HTML: strip_tags
Encodage html: htmlentities
Encode url: urlencode
![Page 14: Sécurité et Quaité de code PHP](https://reader034.fdocument.pub/reader034/viewer/2022052316/559628091a28ab865a8b46e4/html5/thumbnails/14.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052316/559628091a28ab865a8b46e4/html5/thumbnails/15.jpg)
![Page 16: Sécurité et Quaité de code PHP](https://reader034.fdocument.pub/reader034/viewer/2022052316/559628091a28ab865a8b46e4/html5/thumbnails/16.jpg)
É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](https://reader034.fdocument.pub/reader034/viewer/2022052316/559628091a28ab865a8b46e4/html5/thumbnails/17.jpg)
![Page 18: Sécurité et Quaité de code PHP](https://reader034.fdocument.pub/reader034/viewer/2022052316/559628091a28ab865a8b46e4/html5/thumbnails/18.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052316/559628091a28ab865a8b46e4/html5/thumbnails/19.jpg)
![Page 20: Sécurité et Quaité de code PHP](https://reader034.fdocument.pub/reader034/viewer/2022052316/559628091a28ab865a8b46e4/html5/thumbnails/20.jpg)
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 21: Sécurité et Quaité de code PHP](https://reader034.fdocument.pub/reader034/viewer/2022052316/559628091a28ab865a8b46e4/html5/thumbnails/21.jpg)
30 annotations
http://manual.phpdoc.org/HTMLSmartyConverter/PHP/phpDocumentor/tutorial_tags.pkg.html
Possibilité de documentation rapide
![Page 22: Sécurité et Quaité de code PHP](https://reader034.fdocument.pub/reader034/viewer/2022052316/559628091a28ab865a8b46e4/html5/thumbnails/22.jpg)
![Page 23: Sécurité et Quaité de code PHP](https://reader034.fdocument.pub/reader034/viewer/2022052316/559628091a28ab865a8b46e4/html5/thumbnails/23.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052316/559628091a28ab865a8b46e4/html5/thumbnails/24.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052316/559628091a28ab865a8b46e4/html5/thumbnails/25.jpg)
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