Adds missing anti-XSRF protections in Admin module.
authorVincent Zanotti <vincent.zanotti@polytechnique.org>
Sun, 18 May 2008 15:01:13 +0000 (17:01 +0200)
committerVincent Zanotti <vincent.zanotti@polytechnique.org>
Sun, 18 May 2008 17:08:12 +0000 (19:08 +0200)
Signed-off-by: Vincent Zanotti <vincent.zanotti@polytechnique.org>
modules/admin.php
templates/admin/homonymes.tpl
templates/admin/wiki.tpl
templates/core/password_prompt_logged.tpl

index addfe08..e9e899d 100644 (file)
@@ -740,24 +740,34 @@ class AdminModule extends PLModule
             }
         }
 
-        $page->assign('op',$op);
-        $page->assign('target',$target);
+        $page->assign('op', $op);
+        $page->assign('target', $target);
 
         // on a un $target valide, on prepare les mails
         if ($target) {
-
             // on examine l'op a effectuer
             switch ($op) {
                 case 'mail':
-                send_warning_homonyme($prenom, $nom, $forlife, $loginbis);
-                switch_bestalias($target, $loginbis);
+                    if (S::has_xsrf_token()) {
+                        send_warning_homonyme($prenom, $nom, $forlife, $loginbis);
+                        switch_bestalias($target, $loginbis);
+                    } else {
+                        $page->assign('op', 'list');
+                        $page->trig("L'envoi du mail d'homonymie a échoué, merci de réessayer.");
+                    }
                     $op = 'list';
                     break;
+
                 case 'correct':
-                switch_bestalias($target, $loginbis);
-                    XDB::execute("UPDATE aliases SET type='homonyme',expire=NOW() WHERE alias={?}", $loginbis);
-                    XDB::execute("REPLACE INTO homonymes (homonyme_id,user_id) VALUES({?},{?})", $target, $target);
-                send_robot_homonyme($prenom, $nom, $forlife, $loginbis);
+                    if (S::has_xsrf_token()) {
+                        switch_bestalias($target, $loginbis);
+                        XDB::execute("UPDATE aliases SET type='homonyme',expire=NOW() WHERE alias={?}", $loginbis);
+                        XDB::execute("REPLACE INTO homonymes (homonyme_id,user_id) VALUES({?},{?})", $target, $target);
+                        send_robot_homonyme($prenom, $nom, $forlife, $loginbis);
+                    } else {
+                        $page->assign('op', 'list');
+                        $page->trig("La correction de l'homonymie a échouée, merci de réessayer.");
+                    }
                     $op = 'list';
                     break;
             }
@@ -843,7 +853,7 @@ class AdminModule extends PLModule
                 }
             }
             $page->assign('new_deces',$new_deces);
-        } else if (!$validate) {
+        } else if ($validate) {
             $page->trig("La mise à jour des dates de decès à échouée, merci de réessayer.");
         }
 
@@ -1036,7 +1046,7 @@ class AdminModule extends PLModule
         }
 
         // update wiki perms
-        if ($action == 'update') {
+        if ($action == 'update' && S::has_xsrf_token()) {
             $perms_read = Post::v('read');
             $perms_edot = Post::v('edit');
             if ($perms_read || $perms_edit) {
@@ -1051,17 +1061,21 @@ class AdminModule extends PLModule
                     wiki_set_perms($wiki_page, $perms0, $perms1);
                 }
             }
+        } elseif ($action == 'update') {
+            $page->trig("La mise à jour des permissions wiki a échouée, merci de réessayer.");
         }
 
-        if ($action == 'delete' && $wikipage != '') {
+        if ($action == 'delete' && $wikipage != '' && S::has_xsrf_token()) {
             if (wiki_delete_page($wikipage)) {
                 $page->trig("La page ".$wikipage." a été supprimée.");
             } else {
                 $page->trig("Impossible de supprimer la page ".$wikipage.".");
             }
+        } elseif ($action == 'delete' && $wikipage != '') {
+            $page->trig("La suppression de la page wiki a échouée, merci de réessayer.");
         }
 
-        if ($action == 'rename' && $wikipage != '' && $wikipage2 != '' && $wikipage != $wikipage2) {
+        if ($action == 'rename' && $wikipage != '' && $wikipage2 != '' && $wikipage != $wikipage2 && S::has_xsrf_token()) {
             if ($changedLinks = wiki_rename_page($wikipage, $wikipage2)) {
                 $s = 'La page <em>'.$wikipage.'</em> a été déplacée en <em>'.$wikipage2.'</em>.';
                 if (is_numeric($changedLinks)) {
@@ -1071,6 +1085,8 @@ class AdminModule extends PLModule
             } else {
                 $page->trig("Impossible de déplacer la page ".$wikipage);
             }
+        } elseif ($action == 'rename' && $wikipage != '' && $wikipage2 != '' && $wikipage != $wikipage2) {
+            $page->trig("Le renommage de la page wiki a échoué, merci de réessayer.");
         }
 
         $perms = wiki_perms_options();
@@ -1146,7 +1162,7 @@ class AdminModule extends PLModule
                 if (S::has_xsrf_token()) {
                     Xdb::execute('DELETE FROM ip_watch WHERE ip = {?}', ip_to_uint($ip));
                 } else {
-                    $page->trig("La suppression de l'adresse IP a échouée, merci de réssayer.");
+                    $page->trig("La suppression de l'adresse IP a échouée, merci de réessayer.");
                 }
             }
         }
index 1b71bfa..b254bcc 100644 (file)
@@ -73,6 +73,7 @@
 {elseif $op eq 'mail-conf'}
 
 <form method="post" action="admin/homonyms/mail/{$target}">
+  {xsrf_token_field}
   <table class="bicol">
     <tr>
       <th>Envoyer un mail pour prévenir l'utilisateur</th>
@@ -108,6 +109,7 @@ L'équipe Polytechnique.org
 {elseif $op eq 'correct-conf'}
 
 <form method="post" action="admin/homonyms/correct/{$target}">
+  {xsrf_token_field}
   <table class="bicol">
     <tr>
       <th>Mettre en place le robot {$loginbis}@{#globals.mail.domain#}</th>
index c8257f3..45de786 100644 (file)
@@ -73,6 +73,7 @@
 </p>
 
 <form action="admin/wiki/update" method="post" id="update_pages">
+{xsrf_token_field}
 <table class="bicol">
   <tr>
     <th>
       {$perm.edit}
     </td>
     <td class="action" style="margin-top: 0; margin-bottom: 0; padding-top: 0; padding-bottom: 0; height: 20px">
-      <a href="admin/wiki/rename/{$cat}.{$page}" onclick="var newname=prompt('Déplacer la page {$cat}.{$page} vers&nbsp;:', '{$cat}.{$page}'); if (!newname) return false; this.href += '/'+newname;">{icon name=book_next title='déplacer'}</a>
-      <a href="admin/wiki/delete/{$cat}.{$page}" onclick="return confirm('Supprimer la page {$cat}.{$page} ?');">{icon name=cross title='supprimer'}</a>
+      <a href="admin/wiki/rename/{$cat}.{$page}" onclick="var newname=prompt('Déplacer la page {$cat}.{$page} vers&nbsp;:', '{$cat}.{$page}'); if (!newname) return false; this.href += '/' + newname + '?token={xsrf_token}';">{icon name=book_next title='déplacer'}</a>
+      <a href="admin/wiki/delete/{$cat}.{$page}?token={xsrf_token}" onclick="return confirm('Supprimer la page {$cat}.{$page} ?');">{icon name=cross title='supprimer'}</a>
       <input type="checkbox" name="{$cat}/{$page}"/>
     </td>
   </tr>
index 54a8aed..32e517d 100644 (file)
@@ -75,6 +75,7 @@
 <!-- Set up the form with the challenge value and an empty reply value -->
 <form action="{$smarty.server.REQUEST_URI}" method="post" id="loginsub">
   <div>
+    {xsrf_token_field}
     <input type="hidden" name="challenge" value="{$smarty.session.challenge}" />
     <input type="hidden" name="username"  value="{$smarty.cookies.ORGuid}" />
     <input type="hidden" name="xorpass"  value="" />