[ Index ] |
|
Code source de SPIP 1.9.2c |
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 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Wed Nov 21 10:20:27 2007 | par Balluche grâce à PHPXref 0.7 |
![]() |