Fixes the most critical XSRF vulnerabilities in Xnet/XnetGrp.
authorVincent Zanotti <vincent.zanotti@polytechnique.org>
Fri, 25 Apr 2008 17:14:15 +0000 (19:14 +0200)
committerVincent Zanotti <vincent.zanotti@polytechnique.org>
Fri, 25 Apr 2008 17:14:15 +0000 (19:14 +0200)
Signed-off-by: Vincent Zanotti <vincent.zanotti@polytechnique.org>
modules/xnet.php
modules/xnetgrp.php
templates/xnet/admin.tpl
templates/xnetgrp/edit.tpl

index d592f5b..c05c939 100644 (file)
@@ -80,7 +80,7 @@ class XnetModule extends PLModule
                                         Get::v('del'));
             list($id, $nom, $domain) = $res->fetchOneRow();
             $page->assign('nom', $nom);
-            if ($id && Post::has('del')) {
+            if ($id && Post::has('del') && Session::has_xsrf_token()) {
                 XDB::query('DELETE FROM groupex.membres WHERE asso_id={?}', $id);
                 $page->trig('membres supprimés');
 
@@ -103,16 +103,20 @@ class XnetModule extends PLModule
                 XDB::query('DELETE FROM groupex.asso WHERE id={?}', $id);
                 $page->trig("Groupe $nom supprimé");
                 Get::kill('del');
+            } else if ($id && Post::has('del')) {
+                $page->trig("La suppression du groupe X a échouée, merci de réssayer.");
             }
             if (!$id) {
                 Get::kill('del');
             }
         }
 
-        if (Post::has('diminutif')) {
+        if (Post::has('diminutif') && Session::has_xsrf_token()) {
             XDB::query('INSERT INTO groupex.asso (id,diminutif)
                                  VALUES(NULL,{?})', Post::v('diminutif'));
             pl_redirect('../'.Post::v('diminutif').'/edit');
+        } else if (Post::has('diminutif')) {
+            $page->trig("L'ajout du groupe X a échoué, merci de réssayer.");
         }
 
         $res = XDB::query('SELECT nom,diminutif FROM groupex.asso ORDER by NOM');
index 79496d2..b064196 100644 (file)
@@ -221,7 +221,7 @@ class XnetGrpModule extends PLModule
         global $globals;
         $page->changeTpl('xnetgrp/edit.tpl');
 
-        if (Post::has('submit')) {
+        if (Post::has('submit') && Session::has_xsrf_token()) {
             if (S::has_perms()) {
                 if (Post::v('mail_domain') && (strstr(Post::v('mail_domain'), '.') === false)) {
                     $page->trig("le domaine doit être un FQDN (aucune modif effectuée) !!!");
@@ -272,6 +272,8 @@ class XnetGrpModule extends PLModule
             }
 
             pl_redirect('../'.Post::v('diminutif', $globals->asso('diminutif')).'/edit');
+        } else if (Post::has('submit')) {
+            $page->trig("La mise à jour des paramètres du groupe a échouée, merci de réssayer.");
         }
 
         if (S::has_perms()) {
index b495608..fe44a1a 100644 (file)
@@ -25,6 +25,7 @@
 <h1>Suppression du groupe {$nom}</h1>
 
 <form action="admin?del={$smarty.request.del}" method="post">
+  {xsrf_token_field}
   <div class="center">
     <input type="submit" name="del" value="Oui, je veux supprimer ce groupe" />
   </div>
@@ -35,6 +36,7 @@
 <h1>Ajouter un groupe</h1>
 
 <form action="admin" method="post">
+  {xsrf_token_field}
   <p class="descr">
   Pour ajouter un groupe, choisir ici le diminutif qu'il va utiliser,
   tu seras ensuite redirigé vers une page te permettant d'éditer le groupe&nbsp;:
index 9ba8a6b..fb9a389 100644 (file)
@@ -23,6 +23,7 @@
 <h1>{if $asso.nom}{$asso.nom}&nbsp;: {/if}Éditer l'accueil</h1>
 
 <form method="post" action="{$platal->ns}edit" enctype="multipart/form-data">
+  {xsrf_token_field}
   {if $super}
   <table cellpadding="0" cellspacing="0" class='tiny'>
     <tr>