1 | <?php |
---|
2 | |
---|
3 | /***************************************************************************\ |
---|
4 | * SPIP, Systeme de publication pour l'internet * |
---|
5 | * * |
---|
6 | * Copyright (c) 2001-2015 * |
---|
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 | // Gestion ou simulation du register_globals a 'On' (PHP < 4.1.x) |
---|
16 | // Code a l'agonie, heureusement. |
---|
17 | // NB: c'est une fonction de maniere a ne pas pourrir $GLOBALS |
---|
18 | // http://code.spip.net/@spip_register_globals |
---|
19 | function spip_register_globals($type='') { |
---|
20 | |
---|
21 | spip_log("spip_register_globals($type)"); |
---|
22 | |
---|
23 | // Liste des variables dont on refuse qu'elles puissent provenir du client |
---|
24 | $refuse_gpc = array ( |
---|
25 | # inc-public |
---|
26 | 'fond', 'delais' /*, |
---|
27 | |
---|
28 | # ecrire/inc_auth (ceux-ci sont bien verifies dans $_SERVER) |
---|
29 | 'REMOTE_USER', |
---|
30 | 'PHP_AUTH_USER', 'PHP_AUTH_PW' |
---|
31 | */ |
---|
32 | ); |
---|
33 | |
---|
34 | // Liste des variables (contexte) dont on refuse qu'elles soient cookie |
---|
35 | // (histoire que personne ne vienne fausser le cache) |
---|
36 | $refuse_c = array ( |
---|
37 | # inc-calcul |
---|
38 | 'id_parent', 'id_rubrique', 'id_article', |
---|
39 | 'id_auteur', 'id_breve', 'id_forum', 'id_secteur', |
---|
40 | 'id_syndic', 'id_syndic_article', 'id_mot', 'id_groupe', |
---|
41 | 'id_document', 'date', 'lang', |
---|
42 | // et celles relatives aux raccourcis (cf inc/texte) |
---|
43 | 'class_spip', 'class_spip_plus', |
---|
44 | 'toujours_paragrapher', 'ligne_horizontale', |
---|
45 | 'spip_raccourcis_typo', |
---|
46 | 'puce', 'puce_prive', 'puce_rtl', 'puce_prive_rtl', |
---|
47 | 'debut_intertitre', 'fin_intertitre', |
---|
48 | 'debut_gras', 'fin_gras', 'debut_italique', 'fin_italique', |
---|
49 | 'ouvre_note', 'ferme_note', 'les_notes', 'compt_note', |
---|
50 | 'ouvre_ref', 'ferme_ref' |
---|
51 | ); |
---|
52 | |
---|
53 | // Si les variables sont passees en global par le serveur, il faut |
---|
54 | // faire quelques verifications de base |
---|
55 | if ($type) { |
---|
56 | foreach ($refuse_gpc as $var) { |
---|
57 | if (isset($GLOBALS[$var])) { |
---|
58 | if ( |
---|
59 | // demande par le client |
---|
60 | $_REQUEST[$var] !== NULL |
---|
61 | // et pas modifie par les fichiers d'appel |
---|
62 | AND $GLOBALS[$var] == $_REQUEST[$var] |
---|
63 | ) // Alors on ne sait pas si c'est un hack |
---|
64 | die ("register_globals: $var interdite"); |
---|
65 | } |
---|
66 | } |
---|
67 | foreach ($refuse_c as $var) { |
---|
68 | if (isset($GLOBALS[$var])) { |
---|
69 | if ( |
---|
70 | isset ($_COOKIE[$var]) |
---|
71 | AND $_COOKIE[$var] == $GLOBALS[$var] |
---|
72 | ) |
---|
73 | define ('spip_interdire_cache', true); |
---|
74 | } |
---|
75 | } |
---|
76 | } |
---|
77 | |
---|
78 | // sinon il faut les passer nous-memes, a l'exception des interdites. |
---|
79 | // (A changer en une liste des variables admissibles...) |
---|
80 | else { |
---|
81 | foreach (array('_SERVER', '_COOKIE', '_POST', '_GET') as $_table) { |
---|
82 | foreach ($GLOBALS[$_table] as $var => $val) { |
---|
83 | if (!isset($GLOBALS[$var]) # indispensable securite |
---|
84 | AND isset($GLOBALS[$_table][$var]) |
---|
85 | AND ($_table == '_SERVER' OR !in_array($var, $refuse_gpc)) |
---|
86 | AND ($_table <> '_COOKIE' OR !in_array($var, $refuse_c))) |
---|
87 | $GLOBALS[$var] = $val; |
---|
88 | } |
---|
89 | } |
---|
90 | } |
---|
91 | |
---|
92 | } |
---|
93 | ?> |
---|