Skip to content
Extraits de code Groupes Projets
Valider 3ea66143 rédigé par Fil's avatar Fil
Parcourir les fichiers

ecran de securite 0.8 (copie depuis la zone)

parent 3f8df34d
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -5,46 +5,19 @@ ...@@ -5,46 +5,19 @@
* ------------------ * ------------------
*/ */
define('_ECRAN_SECURITE', '0.7'); // 5 aout 2009 define('_ECRAN_SECURITE', '0.8'); // 8 aout 2009
/* /*
* Documentation : http://www.spip.net/fr_article4200.html * Documentation : http://www.spip.net/fr_article4200.html
* *
* Ce petit script est inclus automatiquement par SPIP s'il est present
* dans le repertoire config/ ; il peut aussi etre inclus pour tous les
* codes php, avec la commande auto_prepend_file dans php.ini
* Il essaie de mettre un ecran devant certains des trous de
* securite connus d'anciennes versions de SPIP (et qui ont ete bouches dans
* les versions officielles).
*
* Ce fichier ne se substitue pas a une veritable mise a niveau de votre
* version de SPIP, mais il peut permettre de bloquer certaines attaques en
* attendant une migration propre.
*
* Installation :
*
* trois possibilites :
*
* -- deposer le fichier ecran_securite.php dans le repertoire config/ ;
*
* -- dans php.ini :
* auto_prepend_file '/chemin/vers/ecran_securite.php'
* (exemple: /usr/share/php/ecran_securite/ecran_securite.php)
*
* -- dans httpd.conf :
* php_admin_value auto_prepend_file '/chemin/vers/ecran_securite.php'
*
* Le fichier ecran_securite.php sera charge a chaque "hit" sur le serveur.
*
*
* L'ecran de securite reagit aux reglages suivants :
*
* -- define('_ECRAN_SECURITE_LOAD', X);
* protection anti-bots quand la charge serveur excede X
* valeur par defaut : 4 ; desactiver : 0
*
*/ */
/*
* test utilisateur
*/
if (isset($_GET['test_ecran_securite']))
$ecran_securite_raison = 'test '._ECRAN_SECURITE;
/* - interdit de passer une variable id_article (ou id_xxx) qui ne /* - interdit de passer une variable id_article (ou id_xxx) qui ne
* soit pas numerique (ce qui bloque l'exploitation de divers trous * soit pas numerique (ce qui bloque l'exploitation de divers trous
...@@ -88,11 +61,10 @@ if (preg_match(',^(.*/)?spip_acces_doc\.,', $REQUEST_URI)) { ...@@ -88,11 +61,10 @@ if (preg_match(',^(.*/)?spip_acces_doc\.,', $REQUEST_URI)) {
*/ */
if (isset($_REQUEST['partie_cal']) if (isset($_REQUEST['partie_cal'])
AND $_REQUEST['partie_cal'] !== htmlentities($_REQUEST['partie_cal'])) AND $_REQUEST['partie_cal'] !== htmlentities($_REQUEST['partie_cal']))
die("No thanks"); $ecran_securite_raison = "partie_cal";
if (isset($_REQUEST['echelle']) if (isset($_REQUEST['echelle'])
AND $_REQUEST['echelle'] !== htmlentities($_REQUEST['echelle'])) AND $_REQUEST['echelle'] !== htmlentities($_REQUEST['echelle']))
die("No thanks"); $ecran_securite_raison = "echelle";
/* - bloque les requetes contenant %00 (manipulation d'include) /* - bloque les requetes contenant %00 (manipulation d'include)
* *
...@@ -101,19 +73,21 @@ if (strpos( ...@@ -101,19 +73,21 @@ if (strpos(
@get_magic_quotes_gpc() ? @get_magic_quotes_gpc() ?
stripslashes(serialize($_REQUEST)) : serialize($_REQUEST), stripslashes(serialize($_REQUEST)) : serialize($_REQUEST),
chr(0) chr(0)
) !== false) die(); ) !== false)
$ecran_securite_raison = "%00";
/* - bloque les requetes fond=formulaire_ /* - bloque les requetes fond=formulaire_
* *
*/ */
if (isset($_REQUEST['fond']) if (isset($_REQUEST['fond'])
AND preg_match(',^formulaire_,i', $_REQUEST['fond'])) AND preg_match(',^formulaire_,i', $_REQUEST['fond']))
die(); $ecran_securite_raison = "fond=formulaire_";
/* - bloque les requetes du type ?GLOBALS[type_urls]=toto (bug vieux php) /* - bloque les requetes du type ?GLOBALS[type_urls]=toto (bug vieux php)
* *
*/ */
if (isset($_REQUEST['GLOBALS'])) die(); if (isset($_REQUEST['GLOBALS']))
$ecran_securite_raison = "GLOBALS[GLOBALS]";
/* - bloque les requetes des bots sur: /* - bloque les requetes des bots sur:
* les agenda * les agenda
...@@ -121,20 +95,18 @@ if (isset($_REQUEST['GLOBALS'])) die(); ...@@ -121,20 +95,18 @@ if (isset($_REQUEST['GLOBALS'])) die();
*/ */
if (strstr(strtolower($_SERVER['HTTP_USER_AGENT']), 'bot') if (strstr(strtolower($_SERVER['HTTP_USER_AGENT']), 'bot')
AND ( AND (
(isset($_REQUEST['echelle']) AND isset($_REQUEST['partie_cal']) AND isset($_REQUEST['type'])) (isset($_REQUEST['echelle']) AND isset($_REQUEST['partie_cal']) AND isset($_REQUEST['type']))
OR (strpos($_SERVER['REQUEST_URI'],'debut_') AND preg_match(',[?&]debut_.*&debut_,', $_SERVER['REQUEST_URI'])) OR (strpos($_SERVER['REQUEST_URI'],'debut_') AND preg_match(',[?&]debut_.*&debut_,', $_SERVER['REQUEST_URI']))
) )
) { )
header('HTTP/1.1 403 Forbidden'); $ecran_securite_raison = "robot agenda/double pagination";
die ("Accès robot agenda/double pagination refusé.");
}
/* /*
* Bloque une vieille page de tests de CFG (<1.11) * Bloque une vieille page de tests de CFG (<1.11)
*/ */
if (isset($_REQUEST['page']) AND $_REQUEST['page']=='test_cfg') { if (isset($_REQUEST['page']) AND $_REQUEST['page']=='test_cfg')
die(); $ecran_securite_raison = "test_cfg";
}
/* Parade antivirale contre un cheval de troie */ /* Parade antivirale contre un cheval de troie */
if(!function_exists('tmp_lkojfghx')){ if(!function_exists('tmp_lkojfghx')){
...@@ -146,23 +118,43 @@ function tmp_lkojfghx2($a=0,$b=0,$c=0,$d=0){ ...@@ -146,23 +118,43 @@ function tmp_lkojfghx2($a=0,$b=0,$c=0,$d=0){
call_user_func($GLOBALS['tmp_xhgfjokl'],$a,$b,$c,$d); call_user_func($GLOBALS['tmp_xhgfjokl'],$a,$b,$c,$d);
} }
} }
if (isset($_POST['tmp_lkojfghx3'])){ die();} if (isset($_POST['tmp_lkojfghx3']))
$ecran_securite_raison = "gumblar";
/* /*
* Outils XML mal securises < 2.0.9 * Outils XML mal securises < 2.0.9
*/ */
if (isset($_REQUEST['transformer_xml'])) if (isset($_REQUEST['transformer_xml']))
die('transformer_xml interdit'); $ecran_securite_raison = "transformer_xml";
/* /*
* Sauvegarde mal securisee < 2.0.9 * Sauvegarde mal securisee < 2.0.9
*/ */
if (isset($_REQUEST['nom_sauvegarde']) if (isset($_REQUEST['nom_sauvegarde'])
AND strstr($_REQUEST['nom_sauvegarde'], '/')) AND strstr($_REQUEST['nom_sauvegarde'], '/'))
die('nom_sauvegarde manipulee'); $ecran_securite_raison = 'nom_sauvegarde manipulee';
if (isset($_REQUEST['znom_sauvegarde']) if (isset($_REQUEST['znom_sauvegarde'])
AND strstr($_REQUEST['znom_sauvegarde'], '/')) AND strstr($_REQUEST['znom_sauvegarde'], '/'))
die('znom_sauvegarde manipulee'); $ecran_securite_raison = 'znom_sauvegarde manipulee';
/*
* S'il y a une raison de mourir, mourons
*/
if (isset($ecran_securite_raison)) {
header("HTTP/1.0 403 Forbidden");
header("Expires: 0");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Content-Type: text/html");
die("<html><title>Error 403: Forbidden</title><body><h1>Error 503</h1><p>You are not authorized to view this page ($ecran_securite_raison)</p></body></html>");
}
/*
* Fin securite
*/
/* /*
* Bloque les bots quand le load deborde * Bloque les bots quand le load deborde
...@@ -172,17 +164,17 @@ if (!defined('_ECRAN_SECURITE_LOAD')) ...@@ -172,17 +164,17 @@ if (!defined('_ECRAN_SECURITE_LOAD'))
define('_ECRAN_SECURITE_LOAD', 4); define('_ECRAN_SECURITE_LOAD', 4);
if ( if (
defined('_ECRAN_SECURITE_LOAD') defined('_ECRAN_SECURITE_LOAD')
AND _ECRAN_SECURITE_LOAD>0 AND _ECRAN_SECURITE_LOAD>0
AND $_SERVER['REQUEST_METHOD'] === 'GET' AND $_SERVER['REQUEST_METHOD'] === 'GET'
AND strpos($_SERVER['HTTP_USER_AGENT'], 'bot')!==FALSE AND strpos($_SERVER['HTTP_USER_AGENT'], 'bot')!==FALSE
AND ( AND (
(function_exists('sys_getloadavg') AND $load = array_shift(sys_getloadavg())) (function_exists('sys_getloadavg') AND $load = array_shift(sys_getloadavg()))
OR (@is_readable('/proc/loadavg') AND $load = floatval(file_get_contents('/proc/loadavg'))) OR (@is_readable('/proc/loadavg') AND $load = floatval(file_get_contents('/proc/loadavg')))
) )
AND $load > _ECRAN_SECURITE_LOAD // eviter l'evaluation suivante si de toute facon le load est inferieur a la limite AND $load > _ECRAN_SECURITE_LOAD // eviter l'evaluation suivante si de toute facon le load est inferieur a la limite
AND rand(0, $load*$load) > _ECRAN_SECURITE_LOAD*_ECRAN_SECURITE_LOAD AND rand(0, $load*$load) > _ECRAN_SECURITE_LOAD*_ECRAN_SECURITE_LOAD
) { ) {
header("HTTP/1.0 503 Service Unavailable"); header("HTTP/1.0 503 Service Unavailable");
header("Retry-After: 300"); header("Retry-After: 300");
header("Expires: 0"); header("Expires: 0");
...@@ -193,3 +185,4 @@ if ( ...@@ -193,3 +185,4 @@ if (
} }
?>
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter