+++ /dev/null
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
- >
-<html xmlns="http://www.w3.org/1999/xhtml" >
- <head>
- <title>Notions de sécurité sur le Web</title>
-
- <meta http-equiv="Content-Type"
- content="text/html; charset=utf-8" />
- <meta name="copyright"
- content="Copyright © 2013 Kim Nguyễn" />
-
- <!-- Load jQuery -->
- <script src="../jquery-2.0.3.min.js" type="text/javascript" ></script>
- <script src="../libs/raphael-min.js" type="text/javascript" ></script>
- <!-- Load the library -->
- <script src="../simpleWebSlides.js" type="text/javascript" ></script>
-
- <link rel="stylesheet" href="../simpleWebSlides.css" type="text/css" media="all" />
- <!-- Load a custom Theme, the class-element marks this style-sheet
- a "theme" that can be swtiched dynamicaly -->
- <link class="sws-theme" rel="stylesheet" title="U-Psud style" href="../themes/uPsud.css" type="text/css" />
-
- <!-- Customize some templates and initialize -->
-
- <script type="text/javascript">
- SWS.Config['sws-slide-change'] = SWS.Effects.slideChangeFadeOutIn;
- SWS.Config['sws-object-deactivate'] = SWS.Effects.objectDeactivateFadeOut;
- SWS.Config['sws-object-activate'] = SWS.Effects.objectActivateFadeIn;
-
- //Ensures that we load SWS at the very end, after MathJax has
- //been initialized
-
- $(window).load(SWS.Presentation.init);
- </script>
- </head>
- <body>
- <a href="unix_prog_web_08.xhtml" class="sws-previous"/>
- <div class="sws-slide sws-cover sws-option-nofooter">
- <h1>Unix et Programmation Web</h1>
- <h1>Cours 9</h1>
- <a href="mailto:kn@lri.fr">kn@lri.fr</a><br/>
- <a href="http://www.lri.fr/~kn/">http://www.lri.fr/~kn</a>
- </div>
-
- <h1>Faiblesses d'HTTP</h1>
-
- <div class="sws-slide">
- <h1><i>Disclaimer</i></h1>
- <ul>
- <li>Aborde juste quelques aspects de sécurité</li>
- <li>Essaye de montrer quelques principes fondamentaux</li>
- <li>Uniquement axé sur le Web</li>
- </ul>
- <p><b>⇒</b> Ça ne va pas faire de vous des <i>hackers</i>,
- juste vous sensibiliser aux problèmes de sécurité…
- </p>
- </div>
-
- <div class="sws-slide">
- <h1>Élements de cryptographie (1)</h1>
- <p>Alice et Bob veulent échanger des données
- confidentielles.</p>
- <ol style="list-style-type:none;">
- <li>1. Chiffrement <s>symétrique</s>:
- <ul>
- <li>
- Ils se mettent d'accord sur une <em>clé commune</em>
- </li>
- <li> Alice <em>chiffre</em> son message avec la clé et
- l'envoie à Bob</li>
- <li> Bob déchiffre le message avec <em>la clé</em>
- </li>
- </ul>
- <p class="sws-pause">
- <s>Non sûr</s> (Alice et Bob doivent se mettre d'accord sur une clé en
- « clair », par email par exemple) ou <s>non pratique</s>
- (ils doivent se rencontrer physiquement pour échanger la
- clé).<br/>
- <em>Efficace</em>: on peut implanter plusieurs algorithmes
- de chiffrements en utilisant uniquement des opérations
- logiques de bases
- (<tt>AND</tt>, <tt>OR</tt>, <tt>XOR</tt>). Il est facile de
- les implanter sur des puces dédiées (cartes de crédit,
- processeurs mobiles). Ils sont « sûrs » tant que la clé
- reste secrète.
- </p>
- </li>
- </ol>
- </div>
- <div class="sws-slide">
- <h1>Élements de cryptographie (2)</h1>
- <p>Alice et Bob veulent échanger des données
- confidentielles.</p>
- <ol style="list-style-type:none;">
- <li>2. Chiffrement <em>assymétrique</em>:
- <ul>
- <li>Bob crée une <em>clé
- publique</em> <i>K<sup>B</sup><sub>pub</sub></i>
- et une <em style="color:orange;">clé
- secrète</em> <i>K<sup>B</sup><sub>priv</sub></i>, telle
- que<div style="text-align:center">
- ∀<i>msg</i>, <i>K<sup>B</sup><sub>priv</sub></i>(<i>K<sup>B</sup><sub>pub</sub></i>(<i>msg</i>))
- = <i>K<sup>B</sup><sub>pub</sub></i>(<i>K<sup>B</sup><sub>priv</sub></i>(<i>msg</i>))
- = <i>msg</i>
- </div>
- Bob <em>diffuse</em> sa clé publique (sur sa page Web
- par exemple, ou dans un annuaire de clé) et garde sa clé
- privée <em style="color:orange;">secrète</em>.
- </li>
- <li> Alice <em>chiffre</em> son message <i><s>m</s></i> avec la <em>clé
- publique</em> de Bob
- (<i>K<sup>B</sup><sub>pub</sub></i>(<i>m</i>)) et l'envoie à Bob
- </li>
- <li> Bob
- déchiffre le message avec sa clé
- privée: <i>K<sup>B</sup><sub>priv</sub>(K<sup>B</sup><sub>pub</sub></i>(<i>m</i>))=<s><i>m</i></s>
- </li>
- </ul>
- <p class="sws-pause">
- <s>Sûr et pratique</s> (Bob a généré une paire de clé, et a
- déposé la clé publique sur une page Web)<br/>
- <em>Peu efficace</em>: repose sur des problèmes
- mathématiques difficiles (factorisation de grands entiers,
- courbes eliptiques sur les corps finis). Chiffrer et
- déchiffrer un message n'est pas réaliste pour des grands
- messages (vidéo en streaming, requêtes Web, …).
- </p>
- </li>
- </ol>
- </div>
- <div class="sws-slide">
- <h1>Élements de cryptographie (3)</h1>
- <p>On combine les deux méthodes. (Alice envoie un message à Bob)</p>
- <ul>
- <li>Alice choisit une <s>clé symétrique secrète <i>s</i></s></li>
- <li>Elle l'envoie à Bob en utilisant la clé publique de ce
- dernier (<i>K<sup>B</sup><sub>pub</sub></i>(<i>s</i>))
- </li>
- <li>Bob décrypte le message et
- obtient <s><i>s</i></s>=<i>K<sup>B</sup><sub>priv</sub>(K<sup>B</sup><sub>pub</sub></i>(<i>s</i>))
- </li>
- <li>Bob et Alice se sont mis d'accord <em>de manière sûre</em>
- sur une clé commune <s>s</s>! Ils peuvent utiliser un
- algorithme de chiffrement symétrique pour le reste de la
- conversation
- </li>
- </ul>
- <p><b>⇒</b> Ceci est à la base de protocoles tels que HTTPS</p>
- </div>
-
- <div class="sws-slide">
- <h1>Éléments de cryptographie (4)</h1>
- <p>Le chiffrement assymétrique permet aussi d'avoir <em>la
- preuve</em> que quelqu'un est bien Bob!</p>
- <ul>
- <li>Alice choisit un message secret aléatoire <i><s>m</s></i>,
- sans le divulguer (appelé <i>challenge</i>)
- </li>
- <li>Alice
- calcule <i>K<sup>B</sup><sub>pub</sub>(<i>s</i>)</i> et
- l'envoie à la personne qui prétend être Bob
- </li>
- <li>Seule la personne qui possède la clé privée de Bob (donc
- Bob …) peut déchiffrer le message et renvoyer l'original à
- Alice.
- </li>
- </ul>
- <p> <b>⇒</b> Comment garantir que la personne qui a généré
- les clés <s>au départ</s> est bien Bob ?
- </p>
- </div>
- <div class="sws-slide">
- <h1>Une analogie</h1>
- <p>La cryptographie assymétrique fonctionne exactement comme
- l'analogie de la boîte aux
- lettres. Pourquoi ?
- </p>
- <ul class="sws-pause">
- <li>La clé publique est la boîte aux lettres</li>
- <li>La clé privée est la clé de la boîte aux lettres</li>
- <li>Tout le monde peut «crypter» un message en le glissant
- dans ma boîte aux lettres</li>
- <li>Une fois le message crypté (<i>i.e.</i> dans la boîte) il
- est difficile de le récupérer sans avoir la clé</li>
- <li>Il est facile pour moi d'ouvrir la boîte avec ma clé</li>
- </ul>
-
- </div>
- <div class="sws-slide">
- <h1>HTTP: protocole texte « en clair »</h1>
- <p>HTTP est un protocole <em>texte</em>, les données ne sont
- pas chiffrées (cf. TP3) et <em>sans identification</em></p>
- <ul>
- <li><em>Confidentialité</em> : n'importe qui (avec les
- privilèges nécessaires) peut lire ce qui transite entre un client
- et un serveur Web</li>
- <li><em>Authenticité</em> : n'importe qui peut se faire passer
- pour un serveur Web (attaque <i>man in the middle</i>)
- </li>
- </ul>
- </div>
- <div class="sws-slide">
- <h1>Espionnage de connexion</h1>
- <p>Alice représente le client, Bob le serveur et Eve (<i>Eavesdropper</i>)
- l'attaquante</p>
- <p>On suppose que <s>Eve</s> est <s>root</s> sur la
- machine. Il suffit de lire les paquets qui transitent par la
- carte réseau (<tt>tcpdump</tt> sous Linux).
- </p>
- <ul><li>Eve et Alice sont sur la même machine (démo):
- <div style="text-align:center;vertical-align:middle;"><br/>
- <span style="border:1pt solid gray;border-radius:
- 5pt;padding:5pt;font-size:larger;">A
- <s>E</s></span><span style="display:inline-block;height:1ex;width:5em;border-width:1pt
- 0 0 0;border-style:solid; border-color:gray"> </span><span style="border:1pt solid gray;border-radius:
- 5pt;padding:5pt;font-size:larger;">B</span>
-
- </div>
- </li>
- <li>Fonctionne aussi si Eve est sur une machine se trouvant
- sur la route entre Alice et Bob:
- <div style="text-align:center;vertical-align:middle;"><br/>
- <span style="border:1pt solid gray;border-radius:
- 5pt;padding:5pt;font-size:larger;">A</span><span style="display:inline-block;height:1ex;width:5em;border-width:1pt
- 0 0 0;border-style:solid; border-color:gray"> </span><span style="border:1pt solid gray;border-radius:
- 5pt;padding:5pt;font-size:larger;"><s>E</s></span><span style="display:inline-block;height:1ex;width:5em;border-width:1pt
- 0 0 0;border-style:solid; border-color:gray"> </span><span style="border:1pt solid gray;border-radius:
- 5pt;padding:5pt;font-size:larger;">B</span>
-
- </div>
- </li>
- </ul>
- <p>Ce problème touche tous les protocoles en clair: HTTP, POP,
- IMAP, FTP, …. Il peut être résolu grace au <em>chiffrement</em>
- de toute la connexion.</p>
- </div>
- <div class="sws-slide">
- <h1>Attaque <i>Man in the middle</i></h1>
- <p><s>Mallory</s> se place entre Alice (cliente) et Bob (banque), par exemple au
- moyen d'un <em>e-mail</em> frauduleux en HTML:</p>
- <ol> <li> L'émail contient:
- <code><![CDATA[ <html>
- <body>
- Bonjour,
- veuillez vous connecter à votre banque en cliquant ici:
- <a href=']]><s>mallory.com</s>' ><em>www.bob.com</em><![CDATA[</a>
- </body>
-</html>]]></code>
- </li>
- <li>Alice, insouciante, clique sur le lien
- <div style="text-align:center;vertical-align:middle;"><br/>
- <span style="border:1pt solid gray;border-radius:
- 5pt;padding:5pt;font-size:larger;">A</span><span style="display:inline-block;height:1ex;width:5em;border-width:1pt
- 0 0 0;border-style:dashed; border-color:gray"> </span><span style="border:1pt solid gray;border-radius:
- 5pt;padding:5pt;font-size:larger;"><s>M</s></span><span style="display:inline-block;height:1ex;width:5em;border-width:1pt
- 0 0 0;border-style:dashed; border-color:gray"> </span><span style="border:1pt solid gray;border-radius:
- 5pt;padding:5pt;font-size:larger;">B</span>
- </div>
- </li>
- <li>Mallory peut retransmettre les requêtes entre Bob et
- Alice, en les modifiant au passage. Le problème est causé
- par un manque d'authentification (Mallory n'a pas a
- <em>prouver</em> à Alice qu'il est Bob)
- </li>
-</ol>
- </div>
- <div class="sws-slide">
- <h1>Solution: HTTPS</h1>
- <p>HTTP <em>Secure</em></p>
- <ol> <li>Respose sur de la cryptographie assymétrique (pour
- l'authentification et le partage de clé) et symétrique (pour le
- chiffrement de connexion)</li>
- <li>Permet d'authentifier les correspondants et de protéger
- les données
- </li>
- <li>Suppose l'existence de <em>tiers de confiance</em> Alice
- et Bob font confiance à Trent (<i>Trusted Third
- Party</i>)</li>
- </ol>
- <p>Bob possède des clés publiques et privées
- (<i>K<sup>B</sup><sub>pub</sub></i>
- et <i>K<sup>B</sup><sub>priv</sub></i>), Trent possède des clés
- publiques et privées (<i>K<sup>T</sup><sub>pub</sub></i>
- et <i>K<sup>T</sup><sub>priv</sub></i>)
- </p>
- </div>
- <div class="sws-slide">
- <h1>HTTPS (détail du protocole)</h1>
- <p>Bob et Trent <em>se rencontrent</em>. Trent <em>signe</em>
- la clé publique de Bob en calculant
- <div style="text-align:center">
- <i>S<sup>B</sup></i>=<i>K<sup>T</sup><sub>priv</sub></i>(<i>K<sup>B</sup><sub>pub</sub></i>)
- </div>
- Comme Trent utilise sa clé <em>privée</em> on sait que seul
- Trent a pu générer cette signature. De plus, Trent
- a <em>rencontré</em> Bob donc il <em>certifie</em> que la
- clé <i>K<sup>B</sup><sub>pub</sub></i> appartient bien à
- quelqu'un nommé Bob.
- </p>
- <ol>
- <li>Alice (client) veut se connecter à Bob. Bob fournit sa
- clé publique <i>K<sup>B</sup><sub>pub</sub></i> et la
- signature <i>S<sup>B</sup></i></li>
- <li> Alice contacte Trent (en qui elle a confiance) et récupère sa clé
- publique <i>K<sup>T</sup><sub>pub</sub></i>. Elle déchiffre la
- signature: <i>K<sup>T</sup><sub>pub</sub></i>(<i>S<sup>B</sup></i>)
- et vérifie qu'elle retombe bien sur la clé publique de Bob.
- </li>
- <li>Elle peut alors choisir une clé symétrique, la chiffrer
- avec <i>K<sup>B</sup><sub>pub</sub></i> et entammer une
- communication <em>chiffrée</em> et <em>authentifiée</em> avec
- Bob.</li>
- </ol>
-</div>
- <div class="sws-slide">
- <h1>Tiers de confiance</h1>
- <p>Les tiers de confiance sont des entités (états, associations,
- compagnies privées) qui se chargent de vérifier les clés
- publiques d'autres entitées. C'est une
- vérification <em>physique</em> (documents administratifs, …).
- </p>
- <div style="text-align:center"><img style="width:70%" src="ssl-cert.png" alt="ssl"/>
- </div>
- <p style="background:white">Cette erreur s'affiche quand une signature n'est pas conforme
- ou n'a pas pu être vérifiée</p>
- </div>
-
- <div class="sws-slide">
- <h1>Tiers de confiance</h1>
- <p>Attaques contre les <em>authorités de certifications</em>
- (tiers de confiance): difficiles, mais pas impossible. Certains
- tiers de confiance sont douteux (états voyous, compagnie
- piratées dont les clées <s>privées</s> sont compromises,…)<br/>
- <s>Attaques d'implémentation</s> (plus probables) : on
- exploite un <s>bug</s> dans le code des serveurs web ou des
- navigateurs<br/>
- <s>Autres faiblesses</s>: HTTPS est en « haut » dans la pile
- IP (application). On peut donc avoir connaissance du nombre de
- paquet échangés, des adresses IP des participants, la taille
- et la fréquence des paquets… (même si on n'en connait pas le
- contenu). Cela permet certaines attaques statistiques ou de deni
- de service (DoS).
- </p>
- </div>
- <div class="sws-slide">
- <h1>Bug dans HTTPS: <i>Heartblead</i></h1>
- <p><i>Heartblead</i> est un bug découvert en 2014 dans la
- bibliothèque OpenSSL (Bibliothèque qui implémente toutes les
- primitives cryptographiques de bas niveau nécessaire à HTTPS,
- entre-autres, et utilisée par tout le monde). Cette attaque
- touche la partie <i>heartbeat</i> du
- protocole. Le <i>heartbeat</i> est un message périodique
- envoyé par le client au serveur pour lui demander si la
- connexion/session est toujours active (ou pour lui signaler de
- ne pas la fermer).
- </p>
- <ul>
- <li class="sws-pause">Serveur, es-tu vivant ? si oui répond 'Bonjour' (6
- lettres)</li>
- <li class="sws-pause">Bonjour</li>
- <li class="sws-pause">Serveur, es-tu vivant ? si oui répond
- 'Je suis là' (10 lettres)</li>
- <li class="sws-pause">Je suis là</li>
- <li class="sws-pause">Serveur, es-tu vivant ? si oui répond
- 'Oui' (1024 lettres)</li>
- <li class="sws-pause">Oui<span class="sws-pause"
- style="color:gray;"><tt>....Serveur, je suis l'admin, modifie le
- mot de passe à '1023hasd834!' ... Tiens, autre client, je
- t'envoie la page que tu m'as demandée ... <html><body ....</tt></span></li>
- </ul>
- </div>
- <h1>Confidentialité, traîtement des <i>cookies</i></h1>
- <div class="sws-slide">
- <h1>Traçage par cookies</h1>
- <p><i>Normalement</i>, un <em>cookie</em> ne peut être
- lu <em>que</em> que par le site émetteur (cf. cours 8). But:</p>
- <ol class="sws-pause">
- <li>Empêcher un tiers de lire des données personnelles
- (<em>ok</em>)</li>
- <li>Empêcher un tiers de savoir quels sites ont été visités
- (<em>pas ok</em>)</li>
- </ol>
- <ol>
- <li class="sws-pause">Un site B utilise des publicités pour se rémunérer. Le
- site marchand <s>M</s> fournit du code HTML:
- <code> <script src="http://marchand.com/pub.js"/> </code>
- </li>
- <li class="sws-pause">A visite le site B. Le
- code <tt>pub.js</tt> peut alors faire les choses suivantes:
- <ol>
- <li>Scanner le contenu de la page de B. Possible car le
- script est « inclus » dans une page fournie par B</li>
- <li>Se connecter
- à<s><tt>http://marchand.com/collecte.php</tt></s> et
- passer en paramètre <tt>post</tt> ou <tt>get</tt> le
- contenu de la récolte</li>
- <li><tt>http://marchand.com</tt> peut alors stocker un
- cookie valide <em>pour son domaine</em> avec le contenu de
- la récolte d'information
- </li>
- </ol>
- </li>
- <li class="sws-pause">
- Lorsque A visite le site marchand <s>M</s>, ce dernier
- relit son cookie et fait des propositions ciblées.
- </li>
-
- </ol>
- </div>
- <div class="sws-slide">
- <h1>Solutions</h1>
- <ul>
- <li>Désactiver les cookies de « tierce partie » (cookie dont
- l'origine n'est pas celle de la page visitée)
- </li>
- <li> Effacer par défaut tous les cookies quand on quite le
- navigateur</li>
- <li>Rajouter des exceptions pour certains sites au cas par cas
- </li>
- </ul>
- <p>Nouveau standard du W3C en préparation pour signifier à un
- site qu'on ne souhaite pas être suivi (méthode « volontariste
- » qui suppose que les sites commerciaux sont gentils et
- respectent le protocole)</p>
- </div>
- <div class="sws-slide">
- <h1>Sécurité des cookies de session</h1>
- <p>On a vu que les sessions PHP (vrai aussi pour les autres
- langages côté serveur) stockent dans un cookie un identifiant
- unique. Que se passe-t-il si on vole ce cookie ? (démo)
- </p>
- <p class="sws-pause">Pas d'autre solution que de faire confiance
- au <s>root</s> (solutions partielles basées sur le chiffrement
- des disques dur)
- </p>
- </div>
- <h1>Attaques par injection de code</h1>
- <div class="sws-slide">
- <h1>Injection de code Javascript/HTML</h1>
- <p>Vulnérabilité: on exploite le fait qu'un site <s>utilise
- directement</s> les entrées fournies par l'utilisateur.<br/>
- Exemple: commentaires sur un blog.
- </p>
- <ol>
- <li>Une page Web utilise un formulaire pour permettre de
- poster des commentaires sur un blog:
- <code><![CDATA[
- <form action="comment.php" method="post">
- Commentaire: <br/>
- ]]><em><textarea rows="20" cols="60" name="zonetexte"/></em><![CDATA[
- <br/>
- <button type="submit">Envoyer</button>
-</form>]]></code>
- </li>
- <li>Un bout de code PHP écrit le commentaire sur la page:
- <code> echo "Commentaire #$i: <p>";
- <s>echo $_POST["zonetexte"];</s>
- echo "</p>";
-</code>
-</li>
-
-
- </ol>
- </div>
- <div class="sws-slide">
- <h1>Injection de code Javascript/HTML</h1>
- <s>Problème</s> tout ce qui est dans la zone de texte est copié
- dans la page HTML de chaque client qui consulte la page
- et <s>interprété</s> par son navigateur:
- <code>Debut du commentaire
- <s><script type="text/javascript"></s>
- ... //code javascript malicieux
- <s></script></s>
- Fin du commentaire
- </code>
- </div>
- <div class="sws-slide">
- <h1>Injection de code PHP</h1>
- <p><s>Problème</s> lié à l'utilisation de la fonction
- <code> <s>eval</s>($code)</code>
- <tt><em>$code</em></tt> est une chaîne de caractères
- considérée comme étant du code PHP et <tt>eval</tt> exécute
- cette chaîne:
- </p>
- <code>
- echo eval ("1 + 2 * 3"); // affiche 7
- echo eval ('$x = 4;'); // définit la variable $x
- echo $x; // affiche 4
- </code>
- <p>Il ne faut <s>jamais donner une chaine de caractère de
- l'utilisateur comme argument à <tt>eval</tt></s> (sauf durant le
- TP 9)</p>
- </div>
- <div class="sws-slide">
- <h1>Solutions</h1>
- <ul>
- <li>Ne jamais <s>utiliser <tt>eval</tt></s></li>
- <li>Utiliser la fonction <tt>htmlspecialchars</tt> qui
- échappe les
- caractères <tt><</tt>, <tt>></tt>, <tt>&</tt>, <tt>'</tt>, <tt>"</tt></li>
- <li>Utiliser la fonction <tt>striptags</tt> qui supprime tout
- ce qui est une balise</li>
- <li>Toujours valider les entrées d'un utilisateur</li>
- </ul>
- </div>
- <div class="sws-slide">
- <h1>Injection de code SHELL (en PHP)</h1>
- <p><s>Problème</s> lié à l'utilisation de la fonction
- <code> <s>exec</s>($command, &$output)</code>
- Cette fonction exécute dans un SHELL la
- commande <tt>$command</tt>. Les lignes de la sortie standard
- de la commande sont placées dans le table <tt>$output</tt>
- passé en référence. (Démo avec <tt>unzip -l</tt>).<br/>
- Solutions:
- </p>
- <ul>
- <li>Ne jamais passer à exec directement une chaîne crée par
- l'utilisateur</li>
- <li>Recréer sois-même la chaîne de caractères, échapper les
- caractères spéciaux et remettre le tout dans une chaîne pour
- éviter les expansions du SHELL</li>
- <li>Utiliser des fonctions de la bibliothèque standar quand
- elle existes (par exemple <tt>rename</tt> plutot
- que <tt>exec('mv ...')</tt>).</li>
- </ul>
- </div>
- <div class="sws-slide">
- <h1>Injection de code SQL</h1>
- <p>SQL: language de requête permettant d'interroger des bases de
- données. Utilisation classique depuis PHP (on suppose un
- formulaire qui met dans le champ <tt>"nom"</tt> le nom d'un
- étudiant):
- </p>
- <code>
- $Q = <em>"SELECT * FROM STUDENTS WHERE "</em>;
- $Q = $Q . <em>"(NAME = '"</em> . $_POST["nom"] . <em>"');"</em>;
- mysql_query($Q);
- </code>
- <p>Si l'utilisateur donne comme nom « Toto », la requête envoyée
- à la base est: </p>
- <code> SELECT * FROM STUDENTS WHERE (NAME = 'Toto');</code>
- <p>Affiche toutes les lignes de la table <tt>STUDENTS</tt> pour
- lesquel le nom est <tt>Toto</tt></p>
- </div>
- <div class="sws-slide">
- <h1>Jusqu'au jour où …</h1>
- <p>©xkcd<br/>
- <img style="width:90%" src="xkcd.png" alt=""/>
- </p>
- <code> <em>SELECT * FROM STUDENTS WHERE (NAME ='</em><s>Robert');</s>
- <s>DROP TABLE STUDENTS; --</s><em>');'</em>
-
- </code>
- </div>
- <div class="sws-slide">
- <h1>Ou bien…</h1>
- <div style="text-align:center;">
- <img style="width:70%" src="radar.jpg" />
- </div>
- </div>
- </body>
-</html>