Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

Sécurité et Quaité de code PHP

761 vues

Publié le

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

Publié dans : Ingénierie
  • Soyez le premier à aimer ceci

Sécurité et Quaité de code PHP

  1. 1. Jean-Marie Renouard LightPath 2014©
  2. 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. 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
  4. 4. Élimination des paramètres inutiles $allow=array(‘nom ’, ‘comments’); foreach ($_POST as $key => $val) { if (! in_array($allow, $key) { unset($_POST[$key]); } }
  5. 5. 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
  6. 6. 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
  7. 7. 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 ) ) {…}
  8. 8. 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
  9. 9. Retrait de balises HTML: strip_tags Encodage html: htmlentities Encode url: urlencode
  10. 10. 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
  11. 11. É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 »
  12. 12. Application systématique du reformatage Possibilité de reformatage d’un ensemble de fichiers Autorisation d’une meilleur coordination d’équipe
  13. 13. 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
  14. 14. 30 annotations http://manual.phpdoc.org/HTMLSmartyConverter/PHP/phpDocumentor/tutorial_tags.pkg. html Possibilité de documentation rapide
  15. 15. Toujours activé par défaut Activation du maximum de détection. Corriger une erreur => apprendre un bon geste
  16. 16. 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
  17. 17. 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

×