Cours 9
authorKim Nguyễn <kn@lri.fr>
Mon, 25 Nov 2013 12:29:52 +0000 (13:29 +0100)
committerKim Nguyễn <kn@lri.fr>
Mon, 25 Nov 2013 12:29:52 +0000 (13:29 +0100)
prog_internet/password.html [new file with mode: 0644]
prog_internet/password2.php [new file with mode: 0644]
prog_internet/pdf/prog_internet_09.pdf [new file with mode: 0644]
prog_internet/pdf/prog_internet_09_print.pdf [new file with mode: 0644]
prog_internet/prog_internet_08.xhtml
prog_internet/prog_internet_09.xhtml [new file with mode: 0644]
prog_internet/radar.jpg [new file with mode: 0644]
prog_internet/ssl-cert.png [new file with mode: 0644]
prog_internet/stat.php [new file with mode: 0644]
prog_internet/test.php [new file with mode: 0644]
prog_internet/xkcd.png [new file with mode: 0644]

diff --git a/prog_internet/password.html b/prog_internet/password.html
new file mode 100644 (file)
index 0000000..5d82e83
--- /dev/null
@@ -0,0 +1,10 @@
+<html>
+  <body>
+    <form method="post" action="password2.php">
+      Username: <input name="name" type="text" width="20"> </input><br/>
+      Password: <input name="pass" type="password"
+      width="20"></input><br/>
+      <button type="submit">Connect</button>
+    </form>
+  </body>
+</html>
diff --git a/prog_internet/password2.php b/prog_internet/password2.php
new file mode 100644 (file)
index 0000000..e257b59
--- /dev/null
@@ -0,0 +1,10 @@
+<html>
+  <body>
+ <?php
+if (isset($_POST["name"])) {
+       echo "Bonjour, " . $_POST["name"];
+};
+
+?>
+  </body>
+</html>
diff --git a/prog_internet/pdf/prog_internet_09.pdf b/prog_internet/pdf/prog_internet_09.pdf
new file mode 100644 (file)
index 0000000..3bb6362
Binary files /dev/null and b/prog_internet/pdf/prog_internet_09.pdf differ
diff --git a/prog_internet/pdf/prog_internet_09_print.pdf b/prog_internet/pdf/prog_internet_09_print.pdf
new file mode 100644 (file)
index 0000000..1334e7f
Binary files /dev/null and b/prog_internet/pdf/prog_internet_09_print.pdf differ
index 33651a0..9bf82b5 100644 (file)
@@ -36,7 +36,7 @@
     </script>
   </head>
   <body>
-    <a href="prog_internet_06.xhtml" class="sws-previous"/>
+    <a href="prog_internet_07.xhtml" class="sws-previous"/>
     <div class="sws-slide sws-cover sws-option-nofooter">
       <h1>Programmation Internet</h1>
       <h1>Cours 8</h1>
diff --git a/prog_internet/prog_internet_09.xhtml b/prog_internet/prog_internet_09.xhtml
new file mode 100644 (file)
index 0000000..e1a3e3a
--- /dev/null
@@ -0,0 +1,500 @@
+<?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="prog_internet_08.xhtml" class="sws-previous"/>
+    <div class="sws-slide sws-cover sws-option-nofooter">
+      <h1>Programmation Internet</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>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
+           prouver à 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 confience</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 confience</h1>
+      <p>Les tiers de confience 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 confience</h1>
+      <p>Attaques contre les <em>authorités de certifications</em>
+       (tiers de confience): difficiles, mais pas impossible. Certains
+       tiers de confience 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 statisties ou de deni
+       de service.
+      </p>
+    </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>(command)</code>
+       <tt><em>command</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 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>
diff --git a/prog_internet/radar.jpg b/prog_internet/radar.jpg
new file mode 100644 (file)
index 0000000..b4935e5
Binary files /dev/null and b/prog_internet/radar.jpg differ
diff --git a/prog_internet/ssl-cert.png b/prog_internet/ssl-cert.png
new file mode 100644 (file)
index 0000000..9810ad6
Binary files /dev/null and b/prog_internet/ssl-cert.png differ
diff --git a/prog_internet/stat.php b/prog_internet/stat.php
new file mode 100644 (file)
index 0000000..2b41efb
--- /dev/null
@@ -0,0 +1,15 @@
+<html>
+<body>
+<?php
+  if ($_FILES["fichier"]["error"] > 0) {
+          echo "Erreur lors de l'envoi du fichier<br/>\n";
+
+  } else {
+          echo "<ul>\n";
+                  foreach ($_FILES["fichier"] as $k => $v)
+                     echo "<li>${k} : ${v}</li>\n";
+          echo "</ul>\n";
+}
+?>
+</body>
+</html>
\ No newline at end of file
diff --git a/prog_internet/test.php b/prog_internet/test.php
new file mode 100644 (file)
index 0000000..728f971
--- /dev/null
@@ -0,0 +1,10 @@
+<html>
+<body>
+<form action="stat.php" method="post"
+      enctype="multipart/form-data">
+
+  <input type="file" name="fichier" size="20"/>
+
+  <button type="submit">Uploader le fichier</button>
+</form>
+</body>
\ No newline at end of file
diff --git a/prog_internet/xkcd.png b/prog_internet/xkcd.png
new file mode 100644 (file)
index 0000000..530ddc0
Binary files /dev/null and b/prog_internet/xkcd.png differ