Aprs avoir rappel l'importance de principes fondamentaux tel celui de la dfense en profondeur, cet ouvrage explique comment scuriser une application professionnelle en PHP et MySQL tous les niveaux, depuis la configuration du serveur jusqu' la protection de la base de donnes MySQL, sans oublier toutes les vulnrabilits propres aux sites web dynamiques bass sur des langages de script. Préface 7 Avant-propos 9 Pourquoi ce livre ? 9 À qui s’adresse cet ouvrage ? 10 Structure de l’ouvrage 11 Remerciements 13 Contacts 13 Table des matières 15 Partie 1 - Risques liés aux applications web 25 1 - Introduction à la sécurité des applications web 27 Les risques à prévenir 28 L’abus de ressources 28 La destruction de données 29 La publication de données confidentielles 29 Le détournement du site 29 L’usurpation d’identité 30 La mise à mal de l’image de marque du site 30 Concepts de sécurité 30 La sécurité dès la conception 31 La sécurité dans le développement 34 La sécurité de tous les jours 39 2 - Vulnérabilités des pages web 43 Les injections HTML : XSS 43 Prototype d’une injection HTML 44 Attaques par moteur de recherche 46 Savoir protéger les pages web 47 Neutralisation des caractères spéciaux 47 Les balises 48 Les balises JavaScript 49 Les balises images 49 Les URL 50 CSRF : les utilisateurs en otage 53 Se défendre contre une CSRF 55 Ces virus qui s’installent 56 3 - Formulaires et téléchargement : valider les données 59 Les formulaires 59 Quelles défenses pour les formulaires ? 60 La suppression des défenses JavaScript 61 Les enchaînements de pages web 61 Construire une attaque HTTP 62 Un formulaire unique 63 La création de formulaires 64 Maîtriser les erreurs de formulaire 65 Techniques de validation des données 66 Présence et absence de données 66 Les types des données 67 Les données complexes 70 La taille des données 71 La liste blanche 71 La liste noire 72 La liste grise 73 Les expressions régulières 74 Les formats standardisés 75 Les filtres en PHP 75 Le téléchargement de fichiers 78 Comment les fichiers sont envoyés sur le serveur 78 La taille des fichiers 79 Les formats de fichiers 80 Les noms de fichiers sont également vulnérables 82 Savoir gérer les fichiers reçus 84 Les types de fichiers 86 4 - Cookies et sessions 89 Les cookies 89 Présentation des cookies 89 Défendre ses cookies 94 Le cas des tableaux de cookies 98 Un cookie comme défense 99 Forcer le passage par un formulaire 100 Les sessions 100 Fonctionnement des sessions 101 Les risques liés aux sessions 103 Partie 2 Mesures de sécurité pour PHP 109 5 - Installation et configuration de PHP 111 Installation PHP 111 Types d’installation PHP 111 Patch Suhoshin 112 Configurations de sécurité PHP 113 Directives de sécurité 114 Consommation de ressources 120 PHP exposé 123 Configuration des sessions 125 6 - Intégrité des scripts PHP 129 Protection physique 129 Écrasement de fichiers 129 Droits d’écriture 130 Injection de code distant 130 Exécution de code à la volée 132 eval() 132 assert() 133 preg_replace() 134 Téléchargement de fichiers 135 Extensions de fichiers 135 Attention au modérateur 136 Fonctions à surveiller 136 Code PHP 136 Affichages d’information 138 Interfaces externes 140 Gestion des erreurs 143 Exceptions ou messages traditionnels ? 143 Affichage des erreurs par défaut 143 Intercepter les erreurs 144 Audit grâce au niveau d’erreur 144 Partie 3 - Risques liés aux bases de données 147 7 - Vulnérabilités des bases de données 149 Vue d’ensemble des risques associés aux bases de données 149 Un langage universel : SQL 149 Risques dans les manipulations de données 150 Stockage permanent 154 Injections SQL 154 Exemples d’injections SQL 154 Comment bloquer les injections SQL 156 Savoir limiter les dégâts 161 Accès au serveur SQL 162 Où ranger les accès au serveur SQL ? 162 Mot de passe par défaut 164 Accès anonymes au serveur SQL 165 Protocoles de communication de MySQL 166 Accès secondaires 167 Sauvegardes 167 Réplication 168 Fichiers de log SQL 168 Liste des processus 168 Fichiers de données 169 Communications 169 8 - Mesures de sécurité pour MySQL 171 Base de données mysql 171 Règles d’accès à MySQL 172 Utilisateurs MySQL 172 Tables de bases et d’hôtes 174 Gestion des droits 175 Droits sur les données 175 Droits d’administration de MySQL 178 Cas particuliers des droits 179 Configuration MySQL 179 Compilation 179 Moteurs de tables 180 Procédures stockées 182 Interface modulaire de MySQL 183 Directives de configuration 183 Limiter les consommations 185 Partie 4 - Mesures de sécurité pour les technologies connexes 187 9 - Mesures de sécurité côté serveur 189 Courrier électronique 189 Pourriel 189 Injections dans le courrier électronique 190 Défendre ses courriers électroniques 192 Défenses fournies par PHP 193 Système de fichiers 194 Garder le système de fichiers voilé 194 Protéger les fichiers sur le serveur 196 Cas des bases SQLite 198 Fichiers temporaires 198 Système d’exploitation 200 Risques du Shell 200 Protéger les commandes système 201 Structure d’une application web 204 Extensions de fichiers 204 Un dossier hors Web 206 Accéder au réseau depuis PHP 209 Appels séquentiels 209 Appels récursifs 210 Votre site masque une attaque 210 10 - Techniques de sécurisation des applications web 213 Attaque par force brute 213 Fonctionnement de l’attaque 213 Attaque par dictionnaire 214 Identifier l’attaquant 214 Adresse IP 214 Cookie 215 Temporisation 215 Phishing 215 Injection d’intermédiaire réseau 216 Éducation des utilisateurs 216 Sécurisation des connexions 216 Dénis de service 217 Quota de consommation 217 Identification des clients 217 Débrayer le système 218 Gestion des mots de passe 218 Signature 218 Stockage des mots de passe 219 Renforcement de la signature 219 Vérification des mots de passe 221 Création de mots de passe 221 Mots de passe perdus 222 Chiffrement et signatures 222 Chiffrement 223 Signature 223 Chiffrement en PHP et MySQL 223 Limitation du chiffrement 224 Pots de miel et trappes 224 Complication du code source 226 CAPTCHA 228 Limitations des CAPTCHA 229 Mise en place d’un CAPTCHA 229 11 - Mener un audit de sécurité 235 Organiser un audit 236 Lister les concepts de sécurité appliqués 236 Repérer les variables d’entrée 237 Lister les utilisations des fonctions frontières 237 Suivre l’utilisation des variables 238 Remonter l’utilisation des arguments des fonctions frontières 238 Suivre l’utilisation des résultats des fonctions frontières 238 Repérer les requêtes SQL 238 Vérifier la configuration du serveur 238 Rechercher les identifiants de connexion 239 Faire une revue de code entre pairs 239 Rédiger un rapport d’audit 239 Partie 5 - Annexes 241 A Fonctions de sécurité et caractères spéciaux 243 Fonctions de protection de PHP 244 Caractères spéciaux 245 Fonctions citées dans le livre 247 B Sauvegardes 251 Sauvegarde de l’application 251 Automatiser la remise en état 251 Automatiser la surveillance du code 252 Sauvegarde des données 253 Sécurité du support de stockage 253 Restauration des données 254 C Ressources web 255 Outils utiles 255 PHP et MySQL 255 Outils de filtrages 256 Robots de tests 256 Actualités 258 Sécurité PHP 258 Sécurité MySQL 259 Sécurité des applications web 259 Anti-sèches 262 Sites cités 263 Index 265 Préface......Page 7 Pourquoi ce livre ?......Page 9 À qui s’adresse cet ouvrage ?......Page 10 Structure de l’ouvrage......Page 11 Contacts......Page 13 Table des matières......Page 15 Partie 1 - Risques liés aux applications web......Page 25 1 - Introduction à la sécurité des applications web......Page 27 L’abus de ressources......Page 28 Le détournement du site......Page 29 Concepts de sécurité......Page 30 La sécurité dès la conception......Page 31 La sécurité dans le développement......Page 34 La sécurité de tous les jours......Page 39 Les injections HTML : XSS......Page 43 Prototype d’une injection HTML......Page 44 Attaques par moteur de recherche......Page 46 Neutralisation des caractères spéciaux......Page 47 Les balises ......Page 48 Les balises images......Page 49 Les URL......Page 50 CSRF : les utilisateurs en otage......Page 53 Se défendre contre une CSRF......Page 55 Ces virus qui s’installent......Page 56 Les formulaires......Page 59 Quelles défenses pour les formulaires ?......Page 60 Les enchaînements de pages web......Page 61 Construire une attaque HTTP......Page 62 Un formulaire unique......Page 63 La création de formulaires......Page 64 Maîtriser les erreurs de formulaire......Page 65 Présence et absence de données......Page 66 Les types des données......Page 67 Les données complexes......Page 70 La liste blanche......Page 71 La liste noire......Page 72 La liste grise......Page 73 Les expressions régulières......Page 74 Les filtres en PHP......Page 75 Comment les fichiers sont envoyés sur le serveur......Page 78 La taille des fichiers......Page 79 Les formats de fichiers......Page 80 Les noms de fichiers sont également vulnérables......Page 82 Savoir gérer les fichiers reçus......Page 84 Les types de fichiers......Page 86 Présentation des cookies......Page 89 Défendre ses cookies......Page 94 Le cas des tableaux de cookies......Page 98 Un cookie comme défense......Page 99 Les sessions......Page 100 Fonctionnement des sessions......Page 101 Les risques liés aux sessions......Page 103 Partie 2 Mesures de sécurité pour PHP......Page 109 Types d’installation PHP......Page 111 Patch Suhoshin......Page 112 Configurations de sécurité PHP......Page 113 Directives de sécurité......Page 114 Consommation de ressources......Page 120 PHP exposé......Page 123 Configuration des sessions......Page 125 Écrasement de fichiers......Page 129 Injection de code distant......Page 130 eval()......Page 132 assert()......Page 133 preg_replace()......Page 134 Extensions de fichiers......Page 135 Code PHP......Page 136 Affichages d’information......Page 138 Interfaces externes......Page 140 Affichage des erreurs par défaut......Page 143 Audit grâce au niveau d’erreur......Page 144 Partie 3 - Risques liés aux bases de données......Page 147 Un langage universel : SQL......Page 149 Risques dans les manipulations de données......Page 150 Exemples d’injections SQL......Page 154 Comment bloquer les injections SQL......Page 156 Savoir limiter les dégâts......Page 161 Où ranger les accès au serveur SQL ?......Page 162 Mot de passe par défaut......Page 164 Accès anonymes au serveur SQL......Page 165 Protocoles de communication de MySQL......Page 166 Sauvegardes......Page 167 Liste des processus......Page 168 Communications......Page 169 Base de données mysql......Page 171 Utilisateurs MySQL......Page 172 Tables de bases et d’hôtes......Page 174 Droits sur les données......Page 175 Droits d’administration de MySQL......Page 178 Compilation......Page 179 Moteurs de tables......Page 180 Procédures stockées......Page 182 Directives de configuration......Page 183 Limiter les consommations......Page 185 Partie 4 - Mesures de sécurité pour les technologies connexes......Page 187 Pourriel......Page 189 Injections dans le courrier électronique......Page 190 Défendre ses courriers électroniques......Page 192 Défenses fournies par PHP......Page 193 Garder le système de fichiers voilé......Page 194 Protéger les fichiers sur le serveur......Page 196 Fichiers temporaires......Page 198 Risques du Shell......Page 200 Protéger les commandes système......Page 201 Extensions de fichiers......Page 204 Un dossier hors Web......Page 206 Appels séquentiels......Page 209 Votre site masque une attaque......Page 210 Fonctionnement de l’attaque......Page 213 Adresse IP......Page 214 Phishing......Page 215 Sécurisation des connexions......Page 216 Identification des clients......Page 217 Signature......Page 218 Renforcement de la signature......Page 219 Création de mots de passe......Page 221 Chiffrement et signatures......Page 222 Chiffrement en PHP et MySQL......Page 223 Pots de miel et trappes......Page 224 Complication du code source......Page 226 CAPTCHA......Page 228 Mise en place d’un CAPTCHA......Page 229 11 - Mener un audit de sécurité......Page 235 Lister les concepts de sécurité appliqués......Page 236 Lister les utilisations des fonctions frontières......Page 237 Vérifier la configuration du serveur......Page 238 Rédiger un rapport d’audit......Page 239 Partie 5 - Annexes......Page 241 A Fonctions de sécurité et caractères spéciaux......Page 243 Fonctions de protection de PHP......Page 244 Caractères spéciaux......Page 245 Fonctions citées dans le livre......Page 247 Automatiser la remise en état......Page 251 Automatiser la surveillance du code......Page 252 Sécurité du support de stockage......Page 253 Restauration des données......Page 254 PHP et MySQL......Page 255 Robots de tests......Page 256 Sécurité PHP......Page 258 Sécurité des applications web......Page 259 Anti-sèches......Page 262 Sites cités......Page 263 Index......Page 265