[ Index ]
 

Code source de SPIP 1.9.2c

Accédez au Source d'autres logiciels libres

title

Body

[fermer]

/ecrire/inc/ -> securiser_action.php (source)

   1  <?php
   2  
   3  /***************************************************************************\
   4   *  SPIP, Systeme de publication pour l'internet                           *
   5   *                                                                         *
   6   *  Copyright (c) 2001-2007                                                *
   7   *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
   8   *                                                                         *
   9   *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
  10   *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
  11  \***************************************************************************/
  12  
  13  if (!defined("_ECRIRE_INC_VERSION")) return;
  14  
  15  include_spip('inc/meta');
  16  
  17  // interface d'appel:
  18  // - au moins un argument: retourne une URL ou un formulaire securises
  19  // - sans argument: verifie la securite et retourne _request('arg'), ou exit.
  20  
  21  // http://doc.spip.org/@inc_securiser_action_dist
  22  function inc_securiser_action_dist($action='', $arg='', $redirect="", $mode=false, $att='')
  23  {
  24      if ($action)
  25          return securiser_action_auteur($action, $arg, $redirect, $mode, $att);
  26      else {
  27          $arg = _request('arg');
  28          $hash = _request('hash');
  29          $action = _request('action');
  30          if (verifier_action_auteur("$action-$arg", $hash))
  31              return $arg;
  32          include_spip('inc/minipres');
  33          echo minipres();
  34          exit;
  35      }
  36  }
  37  
  38  // http://doc.spip.org/@securiser_action_auteur
  39  function securiser_action_auteur($action, $arg, $redirect="", $mode=false, $att='')
  40  {
  41      static $id_auteur=0, $pass;
  42      if (!$id_auteur) {
  43          list($id_auteur, $pass) =  caracteriser_auteur();
  44      }
  45      $hash = _action_auteur("$action-$arg", $id_auteur, $pass, 'alea_ephemere');
  46      $r = rawurlencode($redirect);
  47      if (!is_string($mode))
  48        return generer_url_action($action, "arg=$arg&hash=$hash" . (!$r ? '' : "&redirect=$r"), $mode);
  49  
  50      // Attention, JS n'aime pas le melange de param GET/POST
  51      return "\n<form style='margin: 0px; border: 0px' action='" .
  52          generer_url_public('') .
  53          "'$att>\n\t<div>
  54          <input name='hash' type='hidden' value='$hash' />
  55          <input name='action' type='hidden' value='$action' />
  56          <input name='arg' type='hidden' value='$arg' />" .
  57          (!$r ? '' : "\n\t\t<input name='redirect' type='hidden' value='$r' />") .
  58          $mode .
  59          "\n\t</div>\n</form>\n";
  60  }
  61  
  62  // http://doc.spip.org/@caracteriser_auteur
  63  function caracteriser_auteur() {
  64      global $auteur_session;
  65      static $caracterisation = array();
  66  
  67      if ($caracterisation) return $caracterisation;
  68  
  69      $id_auteur = $auteur_session['id_auteur'];
  70      if (!$id_auteur) {
  71    // si l'auteur courant n'est pas connu alors qu'il peut demander une action
  72    // c'est une connexion par php_auth, on se rabat sur le cookie.
  73    // S'il n'avait pas le droit de realiser cette action, le hash sera faux.
  74          if (isset($_COOKIE['spip_session'])
  75          AND (preg_match('/^(\d+)/',$_COOKIE['spip_session'],$r))) {
  76                return array($r[1], '');
  77                // Necessaire aux forums anonymes.
  78                // Pour le reste, ca echouera.
  79          } else return array('','');       
  80      }
  81      // Eviter l'acces SQL si le pass est connu de PHP
  82  
  83      if (isset($auteur_session['pass']) AND $auteur_session['pass'])
  84          return $caracterisation = array($id_auteur, $auteur_session['pass']); 
  85      else {
  86          $t = spip_query("SELECT id_auteur, pass FROM spip_auteurs WHERE id_auteur=$id_auteur");
  87          if ($t = spip_fetch_array($t))
  88              return $caracterisation = array($t['id_auteur'], $t['pass']);
  89          include_spip('minipres');
  90          echo minipres();
  91          exit;
  92      }
  93  }
  94  
  95  // http://doc.spip.org/@_action_auteur
  96  function _action_auteur($action, $id_auteur, $pass, $nom_alea) {
  97      return md5($action.$id_auteur.$pass .$GLOBALS['meta'][$nom_alea]);
  98  }
  99  
 100  // http://doc.spip.org/@calculer_action_auteur
 101  function calculer_action_auteur($action) {
 102      list($id_auteur, $pass) = caracteriser_auteur();
 103      return _action_auteur($action, $id_auteur, $pass, 'alea_ephemere');
 104  }
 105  
 106  // http://doc.spip.org/@verifier_action_auteur
 107  function verifier_action_auteur($action, $valeur) {
 108      list($id_auteur, $pass) = caracteriser_auteur();
 109  
 110      if ($valeur == _action_auteur($action, $id_auteur, $pass, 'alea_ephemere'))
 111          return true;
 112      if ($valeur == _action_auteur($action, $id_auteur, $pass, 'alea_ephemere_ancien'))
 113          return true;
 114      return false;
 115  }
 116  
 117  
 118  ?>


Généré le : Wed Nov 21 10:20:27 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics