Problème de sécurité

Bonjour à tous.

Je suis confronté à un problème de sécurité de SPIP et ses squelettes. En
effet, il est possible d'insérer du code PHP à l'intérieur d'un squelette,
mais il est aussi très facile de récupérer ce squelette via le web. On peux
par exemple récupérer le code du squelette pour les rubriques d'Uzine en
tapant http://www.uzine.net/rubrique.html, on y voit du code PHP, mais rien
de bien secret.

Imaginons que je doive récupérer des informations provenant d'une base de
données. Il faudra bien que je mette quelque part dans le squelette les
login et password pour cette base. Et voilà, tout le monde peut récupérer
mes login et password, nom de la base et structure aussi.

Solutions :

- inclure le code php dans un fichier avec l'extension .php3 ou .php (selon
la configuration) et ne faire que des <? include('fichier.php3'); ?> dans le
squelette (pas très pratique si on doit inclure des variables SPIP)
- déplacer tous les squelettes vers un répertoire protégé et modifier les
xxx.php3 (par exemple rubrique.php3) en conséquence, variable
$fond='repertoire_protégé/xxxx.html' comme on le trouve dans le squelette de
www.drop-zone-city.com par exemple.

Je ne sais pas si cette question avait déjà été abordée, mais je pense qu'il
est bien de mettre en garde tout le monde.

Cordialement.
Philippe.

PS: deuxième envoie de cette e-mail sur la liste, le premier ne semble pas
être passé.

Solutions :
- inclure le code php dans un fichier avec l'extension .php3 ou .php (selon
la configuration) et ne faire que des <? include('fichier.php3'); ?> dans le
squelette (pas très pratique si on doit inclure des variables SPIP)

Oui, c'est ça la bonne solution ; et si tu as besoin d'insérer des variables
SPIP, tu peux le faire dans le squelette en appelant une fonction qui, elle,
sera définie dans l'include.

PS: deuxième envoie de cette e-mail sur la liste, le premier ne semble pas
être passé.

(Peut-être avais-tu mis en copie la liste spip-dev : les envois vers les deux
listes sont systématiquement bloqués.)

-- Fil

ben le mieux c est un bon point conf protége en htaccess non ?

-----Message d'origine-----
De : spip-bounces@rezo.net [mailto:spip-bounces@rezo.net]De la part de
Fil
Envoyé : jeudi 19 septembre 2002 16:19
À : Philippe
Cc : spip@rezo.net
Objet : Re: [Spip] Problème de sécurité

Solutions :
- inclure le code php dans un fichier avec l'extension .php3 ou .php

(selon

la configuration) et ne faire que des <? include('fichier.php3'); ?> dans

le

squelette (pas très pratique si on doit inclure des variables SPIP)

Oui, c'est ça la bonne solution ; et si tu as besoin d'insérer des variables
SPIP, tu peux le faire dans le squelette en appelant une fonction qui, elle,
sera définie dans l'include.

PS: deuxième envoie de cette e-mail sur la liste, le premier ne semble pas
être passé.

(Peut-être avais-tu mis en copie la liste spip-dev : les envois vers les
deux
listes sont systématiquement bloqués.)

-- Fil

_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net
Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Documentation de SPIP : http://www.uzine.net/spip

Le 19/09/02 16:18, « Fil » <fil@rezo.net> a écrit :

Je ne fais rien en ce domaine, mais ce que je trouve surprenant c'est que
l'on trouve quelques sites qui parlent SPIP côté technique. Mais aucun ,
apparemment, ne dialogue entre eux.

Pourquoi vous volontaires déterminés ne montaient pas un site collaboratif
où chacun de vous pourrez proposez ses articles, je ne sais pas moi avec
PHP-nuke qui me semble bien adapté à ce genre de choses :wink: - lire SPIP bien
entendu. Ou à défaut un site qui syndique tout se beau monde.

Guillaume

Imaginons que je doive récupérer des informations provenant d'une base de
données. Il faudra bien que je mette quelque part dans le squelette les
login et password pour cette base. Et voilà, tout le monde peut récupérer
mes login et password, nom de la base et structure aussi.

Solutions :

- déplacer tous les squelettes vers un répertoire protégé et modifier les
xxx.php3 (par exemple rubrique.php3) en conséquence, variable
$fond='repertoire_protégé/xxxx.html' comme on le trouve dans le squelette

de

www.drop-zone-city.com par exemple.

Cette solution là me paraît très bien.

Mais j'en profite pour rebondir sur ma proposition de variable
$chemin_squelette (et #CHEMIN_SQUELETTE).

Antoine, Arnaud et Phil, pourquoi ne pas mettre ça en standard dans spip dès
maintenant avec l'arborescence associée ainsi que la protection du
répertoire des squelettes (.htaccess) ???

Cette variable peut s'appeler au choix "$template", "$theme", "$modele"...

Amicalement,

Yves

PS: Le chemin est fixé en dur dans inc-public.php3, mais je pense que la
ligne affectant la variable peut-être modifiée depuis l'interface d'admin de
spip.

PS bis: j'ai regardé le code généré dans le cache, ce n'est pas franchement
optimisé. Le mieux serait de "calculé" une seule fois la valeur du champ
$theme, puis de faire un remplacement de chaines #THEME par la valeur de
$theme.

Mais je ne sais pas si ce mécanisme existe dèjà dans SPIP (je n'est pas
cherché à analyser tout le code en détail).

// fichier inc-public.php3
<?php
// $Id$

$theme = "themes/DropZoneCity"; // <- le chemin est indiqué en dur
$fond = $theme . "/" .$fond;

if (!defined("_INC_PUBLIC")) {
   define("_INC_PUBLIC", "1");

  include("inc-public-global.php3");
}
else {
  include(inclure_fichier($fond, $delais, $contexte_inclus));
}

?>

//fichier inc-calcul-squel.php3

// Ligne 814 ajoutée dans function parser
    'THEME', //YPR

// Ligne 1065 ajoutée dans function calculer_champ
  global $theme; // YPR

// Lignes 1335 et suivantes ajoutées dans calculer_champ
  case 'THEME'; // YPR
    $code = "typo('$theme')";
    break;

<<J'ai renvoyé ce message car il ne semble pas passer.>>

Imaginons que je doive récupérer des informations provenant d'une base de
données. Il faudra bien que je mette quelque part dans le squelette les
login et password pour cette base. Et voilà, tout le monde peut récupérer
mes login et password, nom de la base et structure aussi.

Solutions :

- déplacer tous les squelettes vers un répertoire protégé et modifier les
xxx.php3 (par exemple rubrique.php3) en conséquence, variable
$fond='repertoire_protégé/xxxx.html' comme on le trouve dans le squelette

de

www.drop-zone-city.com par exemple.

Cette solution là me paraît très bien.

Mais j'en profite pour rebondir sur ma proposition de variable
$chemin_squelette (et #CHEMIN_SQUELETTE).

Antoine, Arnaud et Phil, pourquoi ne pas mettre ça en standard dans spip dès
maintenant avec l'arborescence associée ainsi que la protection du
répertoire des squelettes (.htaccess) ???

Cette variable peut s'appeler au choix "$template", "$theme", "$modele"...

Amicalement,

Yves

PS: Le chemin est fixé en dur dans inc-public.php3, mais je pense que la
ligne affectant la variable peut-être modifiée depuis l'interface d'admin de
spip.

PS bis: j'ai regardé le code généré dans le cache, ce n'est pas franchement
optimisé. Le mieux serait de "calculé" une seule fois la valeur du champ
$theme, puis de faire un remplacement de chaines #THEME par la valeur de
$theme.

Mais je ne sais pas si ce mécanisme existe dèjà dans SPIP (je n'est pas
cherché à analyser tout le code en détail).

// fichier inc-public.php3
<?php
// $Id$

$theme = "themes/DropZoneCity"; // <- le chemin est indiqué en dur
$fond = $theme . "/" .$fond;

if (!defined("_INC_PUBLIC")) {
   define("_INC_PUBLIC", "1");

  include("inc-public-global.php3");
}
else {
  include(inclure_fichier($fond, $delais, $contexte_inclus));
}

?>

//fichier inc-calcul-squel.php3

// Ligne 814 ajoutée dans function parser
    'THEME', //YPR

// Ligne 1065 ajoutée dans function calculer_champ
  global $theme; // YPR

// Lignes 1335 et suivantes ajoutées dans calculer_champ
  case 'THEME'; // YPR
    $code = "typo('$theme')";
    break;