[spip-dev] ! ecran_securite en standard

Coucou,

je suis en train d'intégrer l'ecran de sécurité en standard dans SPIP,
de manière à ce qu'il soit encore plus facile de le mettre à jour en
cas de trou (c'est un fichier unique à écraser, et qui n'affecte pas
le fonctionnement du site).

Il s'agit du fichier config/ecran_securite.php ; il est inclus
systématiquement par inc_version, juste après mes_options (ce qui
permet de le désactiver ou de le configurer).

L'idée est que cet écran est indépendant de la version de SPIP :
ainsi, en cas de "trou", il suffit de mettre à jour ce fichier pour
boucher le trou.

Pour le désactiver, il suffit d'indiquer dans mes_options
define('_ECRAN_SECURITE', 0);

Dès que ce script est actif, _ECRAN_SECURITE est définie et a pour
valeur le numéro de version de l'écran.

Si on est hébergeur, on peut l'activer au niveau d'apache, pour tous
les scripts php, avec un auto_prepend_file
'/chemin/vers/ecran_securite.php' ; cela permet, en cas de trou de
sécu, de n'avoir qu'un seul fichier à mettre à jour pour protéger
l'ensemble des SPIP du serveur, y compris les plus vieux.

Outre la sécu à proprement parler, le script fait aussi barrage aux
robots indexeurs :
* sur les doubles paginations et sur les dates folles de l'agenda
* lorsque la charge serveur (load) est trop élevée.

Le niveau de load qui déclenche ce dernier comportement est défini par
défaut à 4 :
define('_ECRAN_SECURITE_LOAD', 4);
=> on peut mettre à 0 pour ne pas appliquer ce comportement.

Je le teste depuis plusieurs mois sur mes serveurs et ça a
spectaculairement résolu les problèmes de saturation.

C'est fait dans les règles (RFC et conseils donnés par Google) et ça
ne nuit pas au référencement : lorsqu'un robot demande une page, si le
serveur est chargé on répond avec un code 503 qui lui dit "pas
maintenant, reviens dans 5 minutes".
  header("HTTP/1.0 503 Service Unavailable");
  header("Retry-After: 300");
cf. http://www.seroundtable.com/archives/015171.html

-- Fil

C'est un peu violent du coup sur une 2.0, puisque ça casse la compat avec certains plugins, non ?
Ne faudrait-il pas le laisser inactif par défaut sur cette branche, en le documentant, pour permettre aux dev de préparer la compatibilité ?
Ou alors, utiliser une protection moins hard sur les id_trucs, (comme addslashes ou _q ?) qui protège contre d'eventuelles injections sans casser les valeurs textuelles ?

Cédric

C'est un peu violent du coup sur une 2.0, puisque ça casse la compat avec
certains plugins, non ?

Non, je ne crois pas. Je l'utilise en tous cas tel quel depuis
longtemps ; j'ai eu une fois un problème, et j'ai changé la variable
problématique.

-- Fil

- ça casse déjà au moins tout ceux qui utilisent le plugin agenda ...
- J'ai eu plusieurs fois à changer de nom de variable sur des plugins persos depuis que je l'utilise.
- ça impose une nouvelle règle qui est : une variable id_xx dans un formulaire ne peut recevoir qu'un entier. A ce titre, on casse la compatibilité avec l'existant, et on ne peut pas présumer de comment codent les webmestre.
Tu n'as peut-être pas rencontré le problème mais il existe et on ne peut pas l'évacuer simplement en disant 'chez moi j'ai pas eu le cas'.

On peut peut-être aussi
- rendre cette protection optionnelle par défaut dans cette version (sachant que SPIP n'a plus cette faille là)
- s'arranger pour que ceux qui copie-colle l'écran tout seul sur une version ancienne de SPIP se retrouvent avec la protection active.
- annoncer que cette règle s'appliquera à partir de la prochaine version majeure.

Qu'en dis-tu ?

Cédric

- ça casse déjà au moins tout ceux qui utilisent le plugin agenda ...
- J'ai eu plusieurs fois à changer de nom de variable sur des plugins persos
depuis que je l'utilise.

oui je pense que c'est la bonne méthode

- ça impose une nouvelle règle qui est : une variable id_xx dans un
formulaire ne peut recevoir qu'un entier. A ce titre, on casse la
compatibilité avec l'existant, et on ne peut pas présumer de comment codent
les webmestre.

je pense que c'est une bonne règle :slight_smile:

Tu n'as peut-être pas rencontré le problème mais il existe et on ne peut pas
l'évacuer simplement en disant 'chez moi j'ai pas eu le cas'.

c'est vrai

On peut peut-être aussi
- rendre cette protection optionnelle par défaut dans cette version (sachant
que SPIP n'a plus cette faille là)

ce n'est pas une faille particulière, c'est juste que ces id_xxx sont
le trou le plus courant quand on fait pas gaffe. D'où la protection

- s'arranger pour que ceux qui copie-colle l'écran tout seul sur une version
ancienne de SPIP se retrouvent avec la protection active.
- annoncer que cette règle s'appliquera à partir de la prochaine version
majeure.

Qu'en dis-tu ?

A mon sens le mieux serait de corriger le ou les plugins qui ne
savaient pas qu'ils allaient se faire pécho, pour qu'ils marchent avec
l'écran de sécurité. Toute autre solution revient à affaiblir cet
écran, et donc la protection

-- Fil

J'entends bien, et je suis d'accord avec ton objectif et le but d'activer cette règle à terme.
Je cherche juste à éviter qu'un upgrade d'une version mineure 2.0.8 à 2.0.9 ne casse des sites a l'insu des webmestres qui ne s'en apercevront pas tout de suite (je suis personnellement incapable de garantir qu'aucun de mes sites ne sera cassé sans faire une analyse du code...)

On peut certes corriger certains plugins, mais on ne peut pas connaître tous les plugins qui sont dans la nature.

En imposant la règle a effet immédiat, on ne peut que créer des problèmes, et c'est contre-productif à moyen terme que de ne pas respecter la pratique :
'un upgrade de version mineure à versions mineure peut se faire les yeux fermés, sans risque de casse'

On a beaucoup de mal à faire passer le message, et lorsqu'un webmestre s'est fait piéger une fois par un site cassé à cause d'un upgrade censé sur, il retient la leçon : ne pas upgrader tant que ça marche.

A ce titre, on affaiblit tous les futurs patch de sécurité que l'on pourra introduire, et c'est une mauvaise chose.

Je préfèrerais vraiment que l'on ait une période de transition pendant laquelle cette règle n'est pas active par défaut sur la branche 2.0.

Cédric

En imposant la règle a effet immédiat, on ne peut que créer des problèmes, et c'est contre-productif à moyen terme que de ne pas respecter la pratique :
'un upgrade de version mineure à versions mineure peut se faire les yeux fermés, sans risque de casse'

Que ça me fait plaisir de te l'entendre dire. Je rappelle que sur notre page d'accueil, savoir

http://trac.rezo.net/trac/spip/wiki

il y a écrit:

Spip est developpé selon deux branches parallèles. La branche « stable » dans laquelle seules des mises à jour de sécurité ou des corrections de bogues sont effectuées.

alors soit on respecte ça, soit on supprime cette affirmation car il n'est pas bon de passer pour des menteurs. Evidemment, vous savez laquelle des solutions je préfère.

             Emmanuel

Oui. Ma proposition est un tout petit peu différente, car je considère que ce qui est le plus important est de ne pas risquer de casser un site existant, et de ne pas avoir de rupture de compatibilité.
A ce titre, je considère acceptable des enrichissements fonctionnels qui ne cassent rien (la mise à jour de la doc est un autre problème), mais pas un ajout de sécurité qui casse.
La proposition énoncée sur le trac pourrait faire considérer comme acceptable ce dernier, ce qui me gêne.

Cédric

En imposant la règle a effet immédiat, on ne peut que créer des
problèmes, et c'est contre-productif à moyen terme que de ne pas respecter
la pratique :
'un upgrade de version mineure à versions mineure peut se faire les yeux
fermés, sans risque de casse'

Oui OK, ça veut dire qu'il y a des gens qui mettent à jour spip mais
pas agenda ? Enfin, faites comme vous le sentez, perso j'applique
l'écran de sécurité au niveau serveur donc hein bon...

-- Fil

Bah alors justement, quel besoin avais-tu de rajouter de l'instabilité à une branche appelée "stable" ?

Committo,Ergo:Sum

Committo,Ergo:sum a écrit :

En imposant la règle a effet immédiat, on ne peut que créer des
problèmes, et c'est contre-productif à moyen terme que de ne pas respecter la pratique :
'un upgrade de version mineure à versions mineure peut se faire les yeux fermés, sans risque de casse'

Oui OK, ça veut dire qu'il y a des gens qui mettent à jour spip mais
pas agenda ? Enfin, faites comme vous le sentez, perso j'applique
l'écran de sécurité au niveau serveur donc hein bon...

Bah alors justement, quel besoin avais-tu de rajouter de l'instabilité à une branche appelée "stable" ?

La motivation était assez évidente :
sécuriser l'écrasante majorité des sites de tous ages et versions
qui utilisent un spip de base,
plus tous ceux dont les id_xxx sont toujours numériques
- ce à quoi le libellé et l'usage dans le spip de base invite -
malgrés les bidouilles et plugins qu'ils ont pu mettre en oeuvre.

JLuc

2009/8/1 JLuc <jluc@no-log.org>

Committo,Ergo:sum a écrit :

Oui OK, ça veut dire qu’il y a des gens qui mettent à jour spip mais
pas agenda ? Enfin, faites comme vous le sentez, perso j’applique
l’écran de sécurité au niveau serveur donc hein bon…

Bah alors justement, quel besoin avais-tu de rajouter de l’instabilité à une branche appelée « stable » ?

La motivation était assez évidente :
sécuriser l’écrasante majorité des sites de tous ages et versions
qui utilisent un spip de base,
plus tous ceux dont les id_xxx sont toujours numériques

  • ce à quoi le libellé et l’usage dans le spip de base invite -
    malgrés les bidouilles et plugins qu’ils ont pu mettre en oeuvre.

Houla ca sent le troll en devenir ça !!! Je vais revenir demain et il va y avoir 60 messages de plus dans le thread :smiley:

Perso, je pense que Cerdic Et Fil ont raison chacun pour ce qu’ils défendent. En revanche, j’ai tendance à rpéférer avoir un Core sécurisé quite à ce que certains plugins soient bloqués quelques temps, plutôt qu’un site sur lequel potentielement chacun de mes plugins sont un trou potentiel de plus à la passoire.

Du coup je suis assez pour une sécu globale du Core aussi en fait :-/

Mais tapez pas hein ? Ce n’est qu’un avis …

L'oiseau2nuit a écrit :

Houla ca sent le troll en devenir ça !!!

C'est juste la réponse à une question.

Quand il manque un élément essentiel à un débat,
j'ai l'impression désagréable
que les enjeux personnels se mettent à primer,
et je me met à craindre pour l'avenir de spip.

Au contraire, la justesse et la rationalité des arguments
inspirants les développements et l'évolution
me rassure ...
du moins quand elles sont là
- et bien entendu quand je comprends le sujet -.

C'est ma sécurité à moi !

JLuc

Moi j'ai PLEIN de plugins persos (des objets spécifiques à un site à chaque fois) où j'utilise id_truc pour les identifiants MAIS à la création de l'objet, il y a toujours "id_truc=new".

Et paf, c'est pas un entier.

MAIS à la création de
l'objet, il y a toujours "id_truc=new".
Et paf, c'est pas un entier.

sed -E "s/new/-1/" plugins/rastapopoulos/*

allez

-- Fil