Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parAuberon Boucher Modifié depuis plus de 10 années
1
Un peu de sécurité Modal Web Modal 2012 - Baptiste DESPREZ
Modal Web - Baptiste DESPREZ Modal Baptiste DESPREZ
2
Modal Web - Baptiste DESPREZ
Un peu de vocabulaire… Injection SQL : : consiste à exploiter une faille d’un site afin d’y « injecter » ses propres requêtes SQL XSS (Cross Site Scripting) : consiste à exploiter une faille d’un site afin d’y déposer son propre code (JavaScript par exemple) CSRF (Cross Site Request Forgery) : consiste à se servir d’un utilisateur pour effectuer diverses actions à son insu
3
Modal Web - Baptiste DESPREZ
Un peu de vocabulaire… Usurpation de session : consiste à récupérer la session d’un utilisateur afin d’accéder à ses données Captcha : petite image bizarroïde que seul un humain est capable de lire (et encore, pas toujours). Bot : Robot informatique
4
… beaucoup de pratique ! Injection SQL
Modal Web - Baptiste DESPREZ … beaucoup de pratique ! Injection SQL Au mieux, le pirate accède au contenu de votre base de données (courriels, données personnelles ou financières, …) Au pire, votre base de données est détruite URL démo : Login : ‘ or 1=1# si on ne connait pas le login, remplacer or par and si on le connait Modal Baptiste DESPREZ
5
Injection SQL Modal 2012 - Baptiste DESPREZ
Modal Web - Baptiste DESPREZ Injection SQL Modal Baptiste DESPREZ
6
Injection SQL Comment se protéger ?
Modal Web - Baptiste DESPREZ Injection SQL Comment se protéger ? Avec PDO : $sth = $dbh -> prepare() puis $sth->execute(array($login, $password)) Sinon : mysql_real_escape_string($login) Restreindre les droits des utilisateurs Mysql (par exemple, créer un utilisateur Mysql lambda pour votre site) N’affichez pas vos erreurs SQL ! Comme préconisé dans le TD, utilisez PDO::prepare suivi de PDOStatement->execute. Cela vous protègera contre les injections SQL (n’utilisez pas directement PDO:: query sauf si votre requête SQL ne contient pas de variable). Les fonctions PHP mysql_real_escape_string ( et addslashes ( permettent comme PDO::prepare d’ajouter des caractères d’échappement, i.e. « \ » devant les caractères réservés. Si vous utilisez une base mysql, je vous conseille d’utiliser la fonction dédiée mysql_real_escape_string. Sinon, addslashes fonctionnera aussi mais rajoutera plus de « \ » devant les caractères spéciaux. La fonction qui fait l’inverse (i.e. retirer tous les « \ ») s’appelle stripslashes ( Les messages de debug sont à bannir d’un site en production… en affichant l’erreur SQL avec la requêtes, vous montrez au pirate que vous ne contrôlez pas vos champs, et, cerise sur la gâteau, vous lui donnez toutes les informations pour bien malmener votre site ! Essayez de restreindre les droits du compte utilisateur de base de données que vous utilisez dans votre code une fois votre site en production. Un utilisateur « admin » détourné pourra casser toute la base de données, et utiliser comme bon lui semble votre serveur. En production, un utilisateur avec les droits SELECT, INSERT, UPDATE, DELETE suffit généralement. Modal Baptiste DESPREZ
7
Modal Web - Baptiste DESPREZ
XSS 21/10/2010 : Twitter est victime d’une faille XSS. Résultat : des utilisateurs spammés, et les serveurs de Twitter à genou (et tout ça avec moins de 140 caractères !!!) 09/01/2012 : Une faille XSS vient d’être découverte sur le site de La Banque Postale URL démo : Modal Baptiste DESPREZ
8
XSS Comment se protéger ?
Modal Web - Baptiste DESPREZ XSS Comment se protéger ? A chaque fois que vous devez afficher un contenu pouvant être modifié par un utilisateur ($_GET, $_POST, …), utilisez htmlspecialchars($string) Empêchez l’utilisateur d’insérer des caractères spéciaux : les signes &,$,*, etc. n’ont rien à faire dans un login par exemple Vérifiez le type (entier -> ctype_digit(), etc.) La fonction php htmlspecialchars ( vous permet de convertir en HTML les caractères réservés à PHP. Les remplacements effectués sont : "&" (et commercial) devient "&" """ (guillemets doubles) devient """ lorsque ENT_NOQUOTES n'est pas utilisée. "'" (guillemet simple) devient "'" uniquement lorsque ENT_QUOTES est utilisée. "<" (inférieur à) devient "<" ">" (supérieur à) devient ">" Elle est très utile dans le cas de formulaires, et vous aidera à vous protéger de la plupart des XSS. D’une manière plus générale, il faut TOUJOURS contrôler toutes les données que les utilisateurs peuvent insérer. Cela concerne aussi bien les formulaires que les paramètres que vous passez par $_GET pour l’affichage de votre page. Dans le cas de la page n’importe quel utilisateur peut modifier le 5 et mettre ce qu’il veut ! Si vous envoyez par GET ou POST ou autre un entier, vérifiez que vous recevez un entier. C’est simple et ça ne coûte rien. Voici la classe ctype qui pourra vous aider dans cette tâche : Modal Baptiste DESPREZ
9
Modal Web - Baptiste DESPREZ
CSRF… … ou comment profiter des droits d’un utilisateur sans que ce dernier ne s’en rende compte Publier une actu sur le site Demander à son collègue de se connecter sur le site : il est obligé de se connecter ! Et le tour est joué Modal Baptiste DESPREZ
10
CSRF Comment se protéger ?
Modal Web - Baptiste DESPREZ CSRF Comment se protéger ? Il n’y a pas de solution miracle mais des pistes pour limiter la faille : security-measures-against-csrf-attacks/ Comment amener les utilisateurs vers mon site contrefait ? Google Trends ! Modal Baptiste DESPREZ
11
Et si on combinait tout ? Démonstration !
Modal Web - Baptiste DESPREZ Et si on combinait tout ? Démonstration ! Connexion au site via injection SQL puis publication du code CSRF via la faille XSS de l’agenda ;) Modal Baptiste DESPREZ
12
Modal Web - Baptiste DESPREZ
Usurpation de session La session (démarrée avec session_start()) est en fait une chaîne alphanumérique partagée entre votre navigateur et le serveur. Il est possible de la prédire (32 caractères quand même), de l’intercepter (via une faille XSS par exemple) ou de la fixer. Webmail de free : Modal Baptiste DESPREZ
13
Usurpation de session Comment se protéger ?
Modal Web - Baptiste DESPREZ Usurpation de session Comment se protéger ? ini_set('session.use_trans_sid', '0'); Régénérer votre session, pour compliquer un peu la tâche du pirate ;) <?php session_name("Mon_Beau_Site_Web" ); session_start(); if (!isset($_SESSION['initiated'])) { session_regenerate_id(); $_SESSION['initiated'] = true; } ?> La directive ini_set('session.use_trans_sid', '0') permet de bloquer le passage de l’ID de session d’un utilisateur par $_GET, c’est-à-dire par l’URL. Même si cette id de session est une chaîne aléatoire, le fait qu’elle passe en clair en facilite la récupération. Le passage par l’URL de l’ID de session intervient généralement quand un utilisateur bloque au niveau de son navigateur tous les cookies des sites. En effet, quand un navigateur ne peut pas écrire votre ID de session dans un fichier, il essaie automatiquement de la passer par l’URL. Vous pouvez tester avec le webmail de Free. Pour bloquer les cookies, dans Firefox (Windwos), allez dans : Outils -> Options… -> Vie privée et décochez « Accepter les cookies » Les cookies sont de petits fichiers stockés par votre navigateur. Ils contiennent généralement des informations sur votre session en cours sur un site web. Ils peuvent aussi servir d’espion (spyware). Le script qui suit permet de sérieusement compliquer la vie du pirate : La fonction session_name permet de changer le nom de la session par défaut qui est PHPSESSID et que vous avez pu voir dans les URL de la diapo précédente. C’est faciliter la vie du hacker que de laisser des options ou des noms par défaut! Sur le webmail de Free, cette session s’appelle « Horde ». Ensuite, vous connaissez la fonction session_start, qui permet de démarrer un session unique sur votre site. Ensuite, pour encore rendre la vie aux pirates un peu plus dure, on va régénérer un ID de session. On commence d’abord par tester l’existence d’une variable booléenne « session initiée », pour éviter de régénérer une session à chaque chargement de page, et, s’il elle n’existe pas, on régénère un ID de session et on crée notre variable booléenne citée précédemment. Modal Baptiste DESPREZ
14
Modal Web - Baptiste DESPREZ
Bot La plupart des attaques sur le net sont effectuées par des Bots plus ou moins intelligents Modal Baptiste DESPREZ
15
Bot Comment se protéger ?
Modal Web - Baptiste DESPREZ Bot Comment se protéger ? Protéger les formulaires publics par des CAPTCHA ( MAIS… Les OCR se perfectionnent Une base de données de 1000 captcha s’achète 1$ Cf. « Comment amener un utilisateur vers mon site contrefait » Modal Baptiste DESPREZ
16
Modal Web - Baptiste DESPREZ
Captcha ! Modal Baptiste DESPREZ
17
Mais aussi… Attaques type DoS ou « Déni de service »
Modal Web - Baptiste DESPREZ Mais aussi… Attaques type DoS ou « Déni de service » Manipulation de cookies Modification du code avec FireBug Google Hacking Attention aux include / require ! Man in the Middle Payant ne veut pas dire plus sécurisé ! … Modal Baptiste DESPREZ
18
Conclusion Ne faites pas confiance aux utilisateurs !
Modal Web - Baptiste DESPREZ Conclusion Ne faites pas confiance aux utilisateurs ! Contrôler tout ce qu’il peuvent modifier ou afficher ($_GET, $_POST, …) Protégez vos formulaires (captcha, modération, …) Protégez l’authentification de votre site avec HTTPS (si possible) Modal Baptiste DESPREZ
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.