diff --git a/ecrire/inc/flock.php b/ecrire/inc/flock.php index 7a5f59940994e6670c880d477beb49f55cbb4457..274f17c998ebf64781260f2b723425a1459dd69e 100644 --- a/ecrire/inc/flock.php +++ b/ecrire/inc/flock.php @@ -180,6 +180,33 @@ function ecrire_fichier ($fichier, $contenu, $ecrire_quand_meme = false, $trunca return false; } +/** + * Ecrire un contenu dans un fichier encapsule en php pour en empecher l'acces en l'absence + * de htaccess + * @param string $fichier + * @param <type> $contenu + * @param <type> $ecrire_quand_meme + * @param <type> $truncate + */ +function ecrire_fichier_securise ($fichier, $contenu, $ecrire_quand_meme = false, $truncate=true) { + $fichier .= ".php"; + $contenu = "<"."?php die ('Acces interdit'); ?".">\n" . $contenu; + return ecrire_fichier($fichier, $contenu, $ecrire_quand_meme, $truncate); +} + +/** + * Lire un fichier encapsule en php + * @param <type> $fichier + * @param <type> $contenu + * @param <type> $options + */ +function lire_fichier_securise ($fichier, &$contenu, $options=false) { + if ($res = lire_fichier("$fichier.php",$contenu,$options)){ + $contenu = substr($contenu,strlen("<"."?php die ('Acces interdit'); ?".">\n")); + } + return $res; +} + // http://doc.spip.org/@raler_fichier function raler_fichier($fichier) { diff --git a/ecrire/inc/meta.php b/ecrire/inc/meta.php index e37c0cd18a59b7287f70bacb5f7cb65a3af3baac..56eb3ce8a8d24197f178f73d23ddf0f0aba60de1 100644 --- a/ecrire/inc/meta.php +++ b/ecrire/inc/meta.php @@ -24,11 +24,12 @@ function inc_meta_dist() // Lire les meta, en cache si present, valide et lisible // en cas d'install ne pas faire confiance au meta_cache eventuel if ((_request('exec')!=='install' OR !test_espace_prive()) - AND $new = jeune_fichier(_FILE_META, _META_CACHE_TIME) + AND $new = jeune_fichier(_FILE_META.".php", _META_CACHE_TIME) # AND (@filemtime(_FILE_META) > @filemtime(_DIR_RESTREINT . '.svn/entries')) - AND $meta = spip_file_get_contents(_FILE_META) + AND lire_fichier_securise(_FILE_META,$meta) AND $meta = @unserialize($meta)) $GLOBALS['meta'] = $meta; + if (isset($GLOBALS['meta']['touch']) && ($GLOBALS['meta']['touch']<time()-_META_CACHE_TIME)) unset($GLOBALS['meta']); // sinon lire en base @@ -39,7 +40,7 @@ function inc_meta_dist() AND (time() > _RENOUVELLE_ALEA + @$GLOBALS['meta']['alea_ephemere_date'])) { // si on n'a pas l'acces en ecriture sur le cache, // ne pas renouveller l'alea sinon le cache devient faux - if (supprimer_fichier(_FILE_META)) { + if (supprimer_fichier(_FILE_META.".php")) { include_spip('inc/acces'); renouvelle_alea(); $new = false; @@ -74,13 +75,13 @@ function lire_metas() { // http://doc.spip.org/@touch_meta function touch_meta($antidate= false){ - if (!$antidate OR !@touch(_FILE_META, $antidate)) { + if (!$antidate OR !@touch(_FILE_META.".php", $antidate)) { $r = $GLOBALS['meta']; unset($r['alea_ephemere']); unset($r['alea_ephemere_ancien']); unset($r['secret_du_site']); if ($antidate) $r['touch']= $antidate; - ecrire_fichier(_FILE_META, serialize($r)); + ecrire_fichier_securise(_FILE_META, serialize($r)); } }