Example #1
0
 /**
  * Appelé par ajax.php pour vérifier un jeton CSRF lors d'un appel ajax (soumission de données) d'une page donnée (vérifie sa valeur en session, quitte si pb).
  * Peut être aussi potentiellement appelé par de rares pages PHP s'envoyant un formulaire sans passer par AJAX (seule officiel_accueil.php est concernée au 10/2012).
  * On utilise REQUEST car c'est tranmis en POST si ajax maison mais en GET si utilisation de jquery.form.js.
  * On teste aussi la présence de données en POST car s'il n'y en a pas alors :
  * - ce peut être à cause de l'upload d'un trop gros fichier qui fait que les variables postées n'arrivent pas
  * - dans ce cas, il n'y a pas vraiment de risque CSRF, puisque aucune (mauvaise) donnée postée n'est traitée
  * La session doit être ouverte.
  *
  * @param string $page
  * @return void
  */
 public static function verifier_jeton_anti_CSRF($page)
 {
   if(Session::page_avec_jeton_CSRF($page))
   {
     if( ( empty($_REQUEST['csrf']) || empty($_SESSION['CSRF'][$_REQUEST['csrf'].'.'.$page]) ) && !empty($_POST) )
     {
       $explication = (substr($page,0,7)!='public_') ? 'Plusieurs onglets ouverts avec des sessions incompatibles ?' : 'Session perdue ?' ;
       exit_error( 'Alerte CSRF' /*titre*/ , 'Jeton CSRF invalide.<br />'.$explication /*contenu*/ );
     }
   }
 }