.Merge branch 'master' of ssh://git.nguyen.vg/hacks/simpleWebSlides
[hacks/simpleWebSlides.git] / unix_prog_web / unix_prog_web_09.xhtml
diff --git a/unix_prog_web/unix_prog_web_09.xhtml b/unix_prog_web/unix_prog_web_09.xhtml
deleted file mode 100644 (file)
index c5267ae..0000000
+++ /dev/null
@@ -1,564 +0,0 @@
-<?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 &#169; 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>&#8658;</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.&nbsp;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.&nbsp; 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">
-               &#8704;<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>&#8658;</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>&#8658;</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 &nbsp;
-          &nbsp; <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>' &gt;<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 ... &lt;html&gt;&lt;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>   &lt;script src="http://marchand.com/pub.js"/&gt; </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>&lt;textarea rows="20" cols="60"  name="zonetexte"/&gt;</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: &lt;p&gt;";
-     <s>echo $_POST["zonetexte"];</s>
-     echo "&lt;/p&gt;";
-</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>&lt;script type="text/javascript"&gt;</s>
-         ... //code javascript malicieux
-       <s>&lt;/script&gt;</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>&lt;</tt>,  <tt>&gt;</tt>,  <tt>&amp;</tt>, <tt>&apos;</tt>,  <tt>&quot;</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, &amp;$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>