Browse Source

ecrire_fichier_securise/lire_fichier_securise permettent d'encapsuler un contenu dans un fichier .php non lisible en http meme si apache ne bloque pas l'acces au repertoire

on applique au cache des meta
svn/root/tags/spip-3.0.0-alpha1
Cerdic 13 years ago
parent
commit
ec57e65f91
  1. 27
      ecrire/inc/flock.php
  2. 11
      ecrire/inc/meta.php

27
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)
{

11
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));
}
}

Loading…
Cancel
Save