Filosofie
Wanneer een "lek" in de beveiliging wordt ontdekt, zal het SPIP development team het probleem zo snel mogelijk trachten te verhelpen voor zijn ontwikkelingsversie en de stabiele versies.
Maar een meerderheid van de gebruikers zal niet altijd de tijd of mogelijkheid hebbe, om de update uit te voeren en heeft de neiging de voors en tegens tegen elkaar af te wegen. Tijdens een update, hoe klein ook, kunnen immers inconsistenties of afwijkingen met geteste en gevalideerde code ontstaan.
Voor een host heeft de informatie over een veiligheidsprobleem is twee kanten: aan de ene kant het "gat" op een van de gehoste sites niet te willen laten zitten en aan de andere kant de beperking zo’n site te mogen aanpassen. En ze offline zetten is vaak niet mogelijk.
Het beveiligingsscherm is gemaakt om op dit probleem te reageren. Het is een uniek, apart PHP-bestand in SPIP dat onafhankelijk van de rest van de code kan worden bijgewerkt en compatibel is met alle versies van SPIP, zelfs de oudste.
Dit bestand is geen vervanging van een echte upgrade van de versie van SPIP, maar het kan helpen sommige aanvallen te blokkeren in afwachting van een goed voorbereide migratie.
In feite kan dit scherm worden ingeschakeld op de server voor alle PHP-scripts (dus niet alleen SPIP) en garandeert, als het wordt bijgewerkt, een beveiliging tegen alle bekende kwetsbaarheden in elke versie van SPIP. Vandaar de naam "screen": het wordt geplaatst tussen de bezoeker en SPIP en controleert of de bezoeker niet probeert om een bekende aanvalsvectoren te exploiteren.
Wanneer een nieuwe kwetsbaarheid wordt ontdekt, is het dus voldoende dit scherm te updaten om ook deze nieuwe soort aanval af te weren. Ondertussen wordt eraan gewerkt de scripts van SPIP aan te passen en deze aanvallen permanent het hoofd te bieden.
Downloaden
De meest recente versie van dit scherm vind je altijd op het adres:
http://zone.spip.org/trac/spip-zone/browser/_core_/securite/
Download link:
http://zone.spip.org/trac/spip-zone...
Je kunt hem ook ophalen en synchroniseren met SVN:svn co svn://zone.spip.org/spip-zone/_core_/securite/
Het bestand heeft de naam ecran_securite.php
Installatie
Er bestaan meerdere methodes om het veiligheidsscherm te installeren:
Op een bepaalde SPIP site:
Vanaf SPIP 2.0.9 volstaat het dit bestand ecran_securite.php
te plaatsen in de map config/
van de site, waarna het automatisch wordt toegepast.
Voor oudere versies van SPIP moet je de volgende code toevoegen aan config/mes_options.php
of ecrire/mes_options.php3
afhankelijk van de gebruikte versie (het bestand moet eventueel worden gemaakt):
<?php
@include_once dirname(__FILE__).'/ecran_securite.php';
?>
Het scherm zal vervolgens worden geladen na het laden van het bestand mes_options.php
.
Op serverniveau:
Plaats het bestand in een voor alle sites leesbare map (bijvoorbeeld in /usr/share/php/ecran_securite/
).
Pas php.ini
aan en voeg de volgende regels toe:
auto_prepend_file '/usr/share/php/ecran_securite/ecran_securite.php'
of pas httpd.conf
aan met de toevoeging:
php_admin_value auto_prepend_file '/usr/share/php/ecran_securite/ecran_securite.php'
In beide gevallen zal het scherm worden opgenomen bij iedere PHP «hit» php en wel vóór het gewone script. Alle bekende «vijandige» aanvallen worden afgeweerd.
Configuratie
Naast beveiliging zorgt het script ook voor het regelen van de toegang door indexatie robots tot PHP scripts, door hun te zeggen «later terug te komen» wanneer de server verzadigd is.
Dit gedrag kan worden geconfigureerd door bovenin het bestand zelf aan te geven:
define('_ECRAN_SECURITE_LOAD', X);
Deze anti-robot beveiliging wordt actief wanneer de load van de server boven de waarde X ligt. De standaardwaarde is 4 en om de functie uit te schakelen geef je waarde 0 aan.
Integratie
Vanaf SPIP 2.1 is het veiligheidsscherm standaard in SPIP geïntegreerd en hoeft bij het ontdekken van een nieuw veiligheidslek alleen een nieuw bestand ecran_securite.php
te worden geïnstalleerd in de plaats van het oude.
Compatibiliteit
Het scherm grijpt zo weinig mogelijk in, het blokkeert alleen variabelen waarvan het weet dat ze ooit slecht door SPIP werden gecontroleerd en dus als gevaarlijke aanval moeten worden beschouwd. Het is dus compatibel met alle versies van SPIP.
Toch blokkeert het scherm enkele variabelen. Zo zal van een variabele met naam id_xxx
altijd worden gecontroleerd of de waarde een geheel getal is om een mogelijke injectie in de SQL code tegen te gaan.
Bepaalde plugins zijn niet compatibel met alle regels van het veiligheidsscherm, wanner ze bijvoorbeeld een &id_x=new
gebruiken om een object x aan te maken.
Verificatie en test
Om de goede werking van het script te testen, kun je op de publieke site de volgende variabele aan een URL toevoegen ?test_ecran_securite=1
, ofwel &test_ecran_securite=1
.
het weergegeven resultaat zal moeten zijn:
Error 403
You are not authorized to view this page (test X.X)
(waarin X.X de versie van het veiligheidsscherm is).