SPIP

[ar] [ast] [bg] [br] [ca] [co] [cpf] [cs] [da] [de] [en] [eo] [es] [eu] [fa] [fon] [fr] [gl] [id] [it] [ja] [lb] [nl] [oc] [pl] [pt] [ro] [ru] [sk] [sv] [tr] [vi] [zh] Espace de traduction

Télécharger

Écran de sécurité

Août 2009 — mis à jour le : Novembre 2013

Toutes les versions de cet article :

L’écran de sécurité est un fichier php unique, qui protège vos sites en bloquant certaines attaques liées à des trous de sécurité. Ce système permet de réagir très rapidement lorsqu’un problème est découvert, en colmatant le trou sans pour autant devoir mettre à niveau tout son site ni appliquer un « patch » complexe.

Version courante : 1.2.2


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é :

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 de SPIP antérieures à 2.0.9, il fallait ajouter le code suivant dans config/mes_options.php ou ecrire/mes_options.php3 :

<?php @include_once dirname(__FILE__).'/ecran_securite.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/repository/revisions/17002 (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.

Note :
Il ne faut pas confondre un load de 4 et une charge CPU de 400% : il n’y a pas de correspondance directe.
En particulier le load reflète les processus en attente, ce qui n’est pas forcément dû à la CPU (parfois ce sont les I/O —notamment d’un NFS—. cf Load_average)

Aussi la valeur de _ECRAN_SECURITE_LOAD ne doit pas s’évaluer uniquement à l’aune du nombre de processeurs de la machine.
D’autant plus que le mécanisme d’allègement de l’écran de sécurité s’active progressivement au fur et à mesure que le load dépasse la valeur seuil : à 4.01 de load il n’y aura quasiment aucune 503 d’envoyée.

4 reprèsente une bonne valeur : elle permet de garder une performance serveur satisfaisante ; elle évite de faire attendre le visiteur.

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.2.2)


Voir le squelette de cette page Site réalisé avec SPIP | Espace de traduction | Espace privé