Philosophie
Lorsqu’elle découvre ou qu’on lui signale un « trou » de sécurité, l’équipe de développement de SPIP s’efforce de corriger le problème au plus vite dans sa version de développement et dans ses versions stables, afin de ne plus diffuser de code fautif.
Cependant, la majorité des utilisateurs n’a pas toujours le temps ou la possibilité de faire la mise à jour, et a tendance à peser le pour et le contre face au risque d’avoir, lors d’une mise à jour même minime, des incompatibilités ou des décalages avec le code testé et validé qu’elle a mis en ligne.
Pour un hébergeur, l’information concernant un problème de sécurité est également à double tranchant : d’un côté il ne souhaite pas laisser de « trou » sur un de ses sites hébergés, de l’autre il n’a pas toujours l’autorisation de modifier les sites. Et les mettre hors-ligne n’est bien souvent pas envisageable, sauf chez les hébergeurs cheap ou paranos.
L’écran de sécurité est là pour répondre à cette problématique. Il s’agit d’un fichier php unique et séparé de SPIP, que l’on peut mettre à jour indépendamment du reste du code, et qui est compatible avec toutes les versions de SPIP, même les plus anciennes.
Ce fichier ne se substitue pas a une véritable mise à niveau de votre version de SPIP, mais il peut permettre de bloquer certaines attaques en attendant une migration propre.
De fait, cet écran peut être activé au niveau du serveur sur l’ensemble des scripts php (SPIP ou pas), et garantit, s’il est à jour, que toutes les failles connues de quelque version de SPIP que ce soit sont impossibles à exploiter. D’où son nom d’« écran » : il se place entre le visiteur et SPIP, et vérifie que le visiteur n’est pas en train d’essayer d’exploiter une attaque connue.
Lorsqu’une nouvelle faille est découverte, il suffit donc de mettre à jour cet écran pour parer toute attaque via ladite faille ; ça laisse le temps de mettre à jour les scripts SPIP à tête reposée au moment idoine.
Téléchargement
Télécharger l’écran de sécurité :
http://zone.spip.org/trac/spip-zone...
Le code de cet écran est consultable à l’adresse suivante :
http://zone.spip.org/trac/spip-zone/browser/_core_/securite/
On peut aussi le récupérer et le synchroniser avec SVN :
svn co svn://zone.spip.org/spip-zone/_core_/securite/
Le fichier est nommé ecran_securite.php
Installation
Il y a plusieurs méthodes pour installer cet écran :
Au niveau d’un site SPIP donné :
À partir de SPIP 2.0.9, il suffit de déposer le fichier ecran_securite.php dans le répertoire config/ du site pour qu’il soit pris en compte automatiquement.
Pour les versions précédentes de SPIP, il convient d’ajouter le code suivant dans
config/mes_options.phpouecrire/mes_options.php3suivant la version de SPIP utilisée (fichiers à créer le cas échéant) :<?php @include_once dirname(__FILE__).'/ecran_securite.php'; ?>L’écran sera alors chargé juste après le fichier
mes_options.php.
Au niveau du serveur :
Déposer ce fichier dans un répertoire lisible par tous les sites (par exemple /usr/share/php/ecran_securite/).
Modifier php.ini, en ajoutant les lignes suivantes :
auto_prepend_file '/usr/share/php/ecran_securite/ecran_securite.php'ou bien, modifier httpd.conf, en ajoutant :
php_admin_value auto_prepend_file '/usr/share/php/ecran_securite/ecran_securite.php'Dans ces deux cas, l’écran est inclus à chaque « hit » php avant le lancement du script normal. Il peut donc bloquer tout appel « malfaisant ».
Note aux webmestres
Attention : pour éviter une erreur 403 lors de l’auto-installation des plugins, il est nécessaire de modifier la fonction generer_form_ecrire du fichier ecrire/inc/utils.php
- SPIP 2.0.x : ligne 1023
- SPIP 2.1.x : ligne 1056
en s’inspirant de la révision 17002 : http://core.spip.org/projects/spip/... (qui sera intégrée dans les versions de SPIP supérieures à 2.1.8)
Configuration
Outre la sécurité, l’écran a la capacité de moduler les accès des robots d’indexation aux scripts php, de manière à leur dire de « revenir plus tard » lorsque le serveur est saturé.
Ce comportement est configurable, en indiquant en haut du fichier lui-même :
define('_ECRAN_SECURITE_LOAD', X);Ce réglage active la protection anti-robots quand la charge du serveur (load) excède la valeur X. La valeur par défaut est 4 ; pour désactiver, mettre 0.
Compatibilité
L’écran intervient le moins possible, il ne fait que bloquer des variables dont on sait qu’elles ont été, à un moment donné de l’histoire de SPIP, mal contrôlées, et qu’elles pouvaient par conséquent donner lieu à une attaque. Il est donc compatible avec toutes les versions de SPIP.
Toutefois, l’écran verrouille certaines variables. Ainsi, par exemple, les variables nommées id_xxx sont toutes contrôlées comme étant obligatoirement des valeurs numériques entières, afin d’éviter toute injection de code SQL via ce genre de variable très courante.
Certains plugins ne sont pas compatibles avec toutes les règles de l’écran, utilisant par exemple &id_x=new pour créer un objet x. Pour être compatibles avec SPIP 2.1, ces plugins devront rapidement être mis en conformité avec les règles de l’écran.
Vérification et test
Pour vérifier la bonne exécution du script, appeler le site public en ajoutant à l’url soit ?test_ecran_securite=1, soit &test_ecran_securite=1.
l’affichage résultant devrait être :
Error 403
You are not authorized to view this page (test 1.0.7)
