Changeset 95895 in spip-zone


Ignore:
Timestamp:
Mar 10, 2016, 1:26:15 PM (5 years ago)
Author:
cedric@…
Message:

un var_isbot pour permettre le monitoring par robot (monitoring de la disponibilite user/robot)
+ mise a jour de la liste des robots

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _core_/securite/ecran_securite.php

    r95823 r95895  
    66 */
    77
    8 define('_ECRAN_SECURITE', '1.2.3'); // 2016-03-07
     8define('_ECRAN_SECURITE', '1.2.4'); // 2016-03-10
    99
    1010/*
     
    1818        $ecran_securite_raison = 'test '._ECRAN_SECURITE;
    1919
    20 /*
    21  * UptimeRobot est un robot mais pas un robot d'indexation. Laissons le donc
    22  * faire son travail qui est de surveiller si le site est en ligne. Et évitons
    23  * de lui renvoyer un code 503 en cas de dépassement de la limite de charge
    24  * définie par ECRAN_SECURITE_LOAD
    25  */
    26 if (!defined('_IS_BOT'))
    27         if (isset($_SERVER['HTTP_USER_AGENT']) AND strpos($_SERVER['HTTP_USER_AGENT'],'uptimerobot'))
    28                 define('_IS_BOT',false);
     20/*
     21 * Monitoring
     22 * var_isbot=0 peut etre utilise par un bot de monitoring pour surveiller la disponibilite d'un site vu par les users
     23 * var_isbot=1 peut etre utilise pour monitorer la disponibilite pour les bots (sujets a 503 de delestage si
     24 * le load depasse ECRAN_SECURITE_LOAD)
     25 */
     26if (!defined('_IS_BOT') and isset($_GET['var_isbot']))
     27                define('_IS_BOT',$_GET['var_isbot']?true:false);
    2928
    3029/*
     
    3433        define('_IS_BOT',
    3534                isset($_SERVER['HTTP_USER_AGENT'])
    36                 AND preg_match(
     35                and preg_match(
    3736            // mots generiques
    3837            ',bot|slurp|crawler|spider|webvac|yandex|'
     
    4039            . 'MSIE 6\.0|'
    4140            // UA plus cibles
    42             . '80legs|accoona|AltaVista|ASPSeek|Baidu|Charlotte|EC2LinkFinder|eStyle|Google|Genieo|INA dlweb|InfegyAtlas|Java VM|LiteFinder|Lycos|Rambler|Scooter|ScrubbyBloglines|Yahoo|Yeti'
    43             . ',i',(string) $_SERVER['HTTP_USER_AGENT'])
     41            . '80legs|accoona|AltaVista|ASPSeek|Baidu|Charlotte|EC2LinkFinder|eStyle|facebook|flipboard|hootsuite|FunWebProducts|Google|Genieo|INA dlweb|InfegyAtlas|Java VM|LiteFinder|Lycos|MetaURI|Moreover|Rambler|Scooter|ScrubbyBloglines|Yahoo|Yeti'
     42            . ',i', (string) $_SERVER['HTTP_USER_AGENT'])
    4443        );
    4544
     
    5251 */
    5352foreach ($_GET as $var => $val)
    54         if ($_GET[$var] AND strncmp($var,"id_",3)==0
    55         AND !in_array($var, array('id_table','id_base')))
    56                 $_GET[$var] = is_array($_GET[$var])?@array_map('intval',$_GET[$var]):intval($_GET[$var]);
     53        if ($_GET[$var] and strncmp($var, "id_", 3) == 0
     54        and !in_array($var, array('id_table', 'id_base')))
     55                $_GET[$var] = is_array($_GET[$var])?@array_map('intval', $_GET[$var]):intval($_GET[$var]);
    5756foreach ($_POST as $var => $val)
    58         if ($_POST[$var] AND strncmp($var,"id_",3)==0
    59         AND !in_array($var, array('id_table','id_base')))
    60                 $_POST[$var] = is_array($_POST[$var])?@array_map('intval',$_POST[$var]):intval($_POST[$var]);
     57        if ($_POST[$var] and strncmp($var, "id_", 3) == 0
     58        and !in_array($var, array('id_table', 'id_base')))
     59                $_POST[$var] = is_array($_POST[$var])?@array_map('intval', $_POST[$var]):intval($_POST[$var]);
    6160foreach ($GLOBALS as $var => $val)
    62         if ($GLOBALS[$var] AND strncmp($var,"id_",3)==0
    63         AND !in_array($var, array('id_table','id_base')))
    64                 $GLOBALS[$var] = is_array($GLOBALS[$var])?@array_map('intval',$GLOBALS[$var]):intval($GLOBALS[$var]);
     61        if ($GLOBALS[$var] and strncmp($var, "id_", 3) == 0
     62        and !in_array($var, array('id_table', 'id_base')))
     63                $GLOBALS[$var] = is_array($GLOBALS[$var])?@array_map('intval', $GLOBALS[$var]):intval($GLOBALS[$var]);
    6564
    6665/*
     
    6867 * précaution dans certaines versions de dev (1.8b2 -> 1.8b5)
    6968 */
    70 $cjpeg_command='';
     69$cjpeg_command = '';
    7170
    7271/*
     
    7574foreach(array('lang', 'var_recherche', 'aide', 'var_lang_r', 'lang_r', 'var_ajax_ancre') as $var) {
    7675        if (isset($_GET[$var]))
    77                 $_REQUEST[$var] = $GLOBALS[$var] = $_GET[$var] = preg_replace(',[^\w\,/#&;-]+,',' ',(string)$_GET[$var]);
     76                $_REQUEST[$var] = $GLOBALS[$var] = $_GET[$var] = preg_replace(',[^\w\,/#&;-]+,', ' ', (string)$_GET[$var]);
    7877        if (isset($_POST[$var]))
    79                 $_REQUEST[$var] = $GLOBALS[$var] = $_POST[$var] = preg_replace(',[^\w\,/#&;-]+,',' ',(string)$_POST[$var]);
     78                $_REQUEST[$var] = $GLOBALS[$var] = $_POST[$var] = preg_replace(',[^\w\,/#&;-]+,', ' ', (string)$_POST[$var]);
    8079}
    8180
     
    9089 * Pas d'inscription abusive
    9190 */
    92 if (isset($_REQUEST['mode']) AND isset($_REQUEST['page'])
    93 AND !in_array($_REQUEST['mode'],array("6forum","1comite"))
    94 AND $_REQUEST['page'] == "identifiants")
     91if (isset($_REQUEST['mode']) and isset($_REQUEST['page'])
     92and !in_array($_REQUEST['mode'], array("6forum", "1comite"))
     93and $_REQUEST['page'] == "identifiants")
    9594        $ecran_securite_raison = "identifiants";
    9695
     
    9998 */
    10099if (isset($_REQUEST['partie_cal'])
    101 AND $_REQUEST['partie_cal'] !== htmlentities((string)$_REQUEST['partie_cal']))
     100and $_REQUEST['partie_cal'] !== htmlentities((string)$_REQUEST['partie_cal']))
    102101        $ecran_securite_raison = "partie_cal";
    103102if (isset($_REQUEST['echelle'])
    104 AND $_REQUEST['echelle'] !== htmlentities((string)$_REQUEST['echelle']))
     103and $_REQUEST['echelle'] !== htmlentities((string)$_REQUEST['echelle']))
    105104        $ecran_securite_raison = "echelle";
    106105
     
    109108 */
    110109if (isset($_REQUEST['exec'])
    111 AND !preg_match(',^[\w-]+$,', (string)$_REQUEST['exec']))
     110and !preg_match(',^[\w-]+$,', (string)$_REQUEST['exec']))
    112111        $ecran_securite_raison = "exec";
    113112if (isset($_REQUEST['cherche_auteur'])
    114 AND preg_match(',[<],', (string)$_REQUEST['cherche_auteur']))
     113and preg_match(',[<],', (string)$_REQUEST['cherche_auteur']))
    115114        $ecran_securite_raison = "cherche_auteur";
    116115if (isset($_REQUEST['exec'])
    117 AND $_REQUEST['exec'] == 'auteurs'
    118 AND preg_match(',[<],', (string)$_REQUEST['recherche']))
     116and $_REQUEST['exec'] == 'auteurs'
     117and preg_match(',[<],', (string)$_REQUEST['recherche']))
    119118        $ecran_securite_raison = "recherche";
    120119if (isset($_REQUEST['action'])
    121 AND $_REQUEST['action'] == 'configurer') {
     120and $_REQUEST['action'] == 'configurer') {
    122121        if (@file_exists('inc_version.php')
    123         OR @file_exists('ecrire/inc_version.php')) {
     122        or @file_exists('ecrire/inc_version.php')) {
    124123                function action_configurer() {
    125124                        include_spip('inc/autoriser');
     
    149148 */
    150149if (isset($_REQUEST['fond'])
    151 AND preg_match(',^formulaire_,i', $_REQUEST['fond']))
     150and preg_match(',^formulaire_,i', $_REQUEST['fond']))
    152151        $ecran_securite_raison = "fond=formulaire_";
    153152
     
    163162 * les paginations entremélées
    164163 */
    165 if (_IS_BOT AND (
    166         (isset($_REQUEST['echelle']) AND isset($_REQUEST['partie_cal']) AND isset($_REQUEST['type']))
    167         OR (strpos((string)$_SERVER['REQUEST_URI'],'debut_') AND preg_match(',[?&]debut_.*&debut_,', (string)$_SERVER['REQUEST_URI']))
     164if (_IS_BOT and (
     165        (isset($_REQUEST['echelle']) and isset($_REQUEST['partie_cal']) and isset($_REQUEST['type']))
     166        or (strpos((string)$_SERVER['REQUEST_URI'], 'debut_') and preg_match(',[?&]debut_.*&debut_,', (string)$_SERVER['REQUEST_URI']))
    168167)
    169168)
     
    175174 */
    176175if (isset($_REQUEST['page'])) {
    177         if ($_REQUEST['page']=='test_cfg')
     176        if ($_REQUEST['page'] == 'test_cfg')
    178177                $ecran_securite_raison = "test_cfg";
    179178        if ($_REQUEST['page'] !== htmlspecialchars((string)$_REQUEST['page']))
    180179                $ecran_securite_raison = "xsspage";
    181180        if ($_REQUEST['page'] == '404'
    182         AND isset($_REQUEST['erreur']))
     181        and isset($_REQUEST['erreur']))
    183182                $ecran_securite_raison = "xss404";
    184183}
     
    188187 */
    189188foreach (array('var_login') as $var)
    190 if (isset($_REQUEST[$var]) AND is_array($_REQUEST[$var]))
     189if (isset($_REQUEST[$var]) and is_array($_REQUEST[$var]))
    191190        $ecran_securite_raison = "xss ".$var;
    192191
     
    196195if (!function_exists('tmp_lkojfghx')) {
    197196        function tmp_lkojfghx() {}
    198         function tmp_lkojfghx2($a=0, $b=0, $c=0, $d=0) {
     197        function tmp_lkojfghx2($a = 0, $b = 0, $c = 0, $d = 0) {
    199198                // si jamais on est arrivé ici sur une erreur php
    200199                // et qu'un autre gestionnaire d'erreur est défini, l'appeller
    201                 if ($b&&$GLOBALS['tmp_xhgfjokl'])
    202                         call_user_func($GLOBALS['tmp_xhgfjokl'],$a,$b,$c,$d);
     200                if ($b && $GLOBALS['tmp_xhgfjokl'])
     201                        call_user_func($GLOBALS['tmp_xhgfjokl'], $a, $b, $c, $d);
    203202        }
    204203}
     
    216215 */
    217216if (isset($_REQUEST['nom_sauvegarde'])
    218 AND strstr((string)$_REQUEST['nom_sauvegarde'], '/'))
     217and strstr((string)$_REQUEST['nom_sauvegarde'], '/'))
    219218        $ecran_securite_raison = 'nom_sauvegarde manipulee';
    220219if (isset($_REQUEST['znom_sauvegarde'])
    221 AND strstr((string)$_REQUEST['znom_sauvegarde'], '/'))
     220and strstr((string)$_REQUEST['znom_sauvegarde'], '/'))
    222221        $ecran_securite_raison = 'znom_sauvegarde manipulee';
    223222
     
    227226 * on vérifie 'page' pour ne pas bloquer ... drupal
    228227 */
    229 if (isset($_REQUEST['op']) AND isset($_REQUEST['page'])
    230 AND $_REQUEST['op'] !== preg_replace('/[^\-\w]/', '', $_REQUEST['op']))
     228if (isset($_REQUEST['op']) and isset($_REQUEST['page'])
     229and $_REQUEST['op'] !== preg_replace('/[^\-\w]/', '', $_REQUEST['op']))
    231230        $ecran_securite_raison = 'op';
    232231
     
    235234 */
    236235if (count($_FILES)){
    237         foreach($_FILES as $k=>$v){
    238                  if (preg_match(',^fichier_\d+$,',$k)
    239                  AND preg_match(',\.php,i',$v['name']))
     236        foreach($_FILES as $k => $v){
     237                 if (preg_match(',^fichier_\d+$,', $k)
     238                 and preg_match(',\.php,i', $v['name']))
    240239                        unset($_FILES[$k]);
    241240        }
     
    245244 * on bloque pas le post pour eviter de perdre des donnees mais on unset la variable et c'est tout
    246245 */
    247 if (isset($_REQUEST['pj_enregistrees_nom']) AND $_REQUEST['pj_enregistrees_nom']){
     246if (isset($_REQUEST['pj_enregistrees_nom']) and $_REQUEST['pj_enregistrees_nom']){
    248247        unset($_REQUEST['pj_enregistrees_nom']);
    249248        unset($_GET['pj_enregistrees_nom']);
     
    255254 */
    256255if (isset($_REQUEST['reinstall'])
    257 AND $_REQUEST['reinstall'] == 'oui')
     256and $_REQUEST['reinstall'] == 'oui')
    258257        $ecran_securite_raison = 'reinstall=oui';
    259258
     
    267266 * Réinjection des clés en html dans l'admin r19561
    268267 */
    269 if (strpos($_SERVER['REQUEST_URI'],"ecrire/")!==false){
    270         $zzzz=implode("",array_keys($_REQUEST));
    271         if (strlen($zzzz)!=strcspn($zzzz,'<>"\''))
     268if (strpos($_SERVER['REQUEST_URI'], "ecrire/") !== false){
     269        $zzzz = implode("", array_keys($_REQUEST));
     270        if (strlen($zzzz) != strcspn($zzzz, '<>"\''))
    272271                $ecran_securite_raison = 'Cle incorrecte en $_REQUEST';
    273272}
     
    277276 */
    278277if (isset($_REQUEST['connect'])
    279         AND
     278        and
    280279        // cas qui permettent de sortir d'un commentaire PHP
    281         (strpos($_REQUEST['connect'], "?")!==false
    282          OR strpos($_REQUEST['connect'], "<")!==false
    283          OR strpos($_REQUEST['connect'], ">")!==false
    284          OR strpos($_REQUEST['connect'], "\n")!==false
    285          OR strpos($_REQUEST['connect'], "\r")!==false)
     280        (strpos($_REQUEST['connect'], "?") !== false
     281         or strpos($_REQUEST['connect'], "<") !== false
     282         or strpos($_REQUEST['connect'], ">") !== false
     283         or strpos($_REQUEST['connect'], "\n") !== false
     284         or strpos($_REQUEST['connect'], "\r") !== false)
    286285        ) {
    287286        $ecran_securite_raison = "malformed connect argument";
     
    301300
    302301/*
     302 * Un filtre filtrer_entites securise
     303 */
     304if (!function_exists('filtre_filtrer_entites_dist')) {
     305        function filtre_filtrer_entites_dist($t) {
     306                include_spip('inc/texte');
     307                return interdire_scripts(filtrer_entites($t));
     308        }
     309}
     310
     311
     312/*
    303313 * Fin sécurité
    304314 */
     
    314324if (
    315325        defined('_ECRAN_SECURITE_LOAD')
    316         AND _ECRAN_SECURITE_LOAD>0
    317         AND _IS_BOT
    318         AND $_SERVER['REQUEST_METHOD'] === 'GET'
    319         AND (
     326        and _ECRAN_SECURITE_LOAD > 0
     327        and _IS_BOT
     328        and $_SERVER['REQUEST_METHOD'] === 'GET'
     329        and (
    320330                (function_exists('sys_getloadavg')
    321                   AND $load = sys_getloadavg()
    322                   AND is_array($load)
    323                   AND $load = array_shift($load)
     331                  and $load = sys_getloadavg()
     332                  and is_array($load)
     333                  and $load = array_shift($load)
    324334                )
    325                 OR
     335                or
    326336                (@is_readable('/proc/loadavg')
    327                   AND $load = file_get_contents('/proc/loadavg')
    328                   AND $load = floatval($load)
     337                  and $load = file_get_contents('/proc/loadavg')
     338                  and $load = floatval($load)
    329339                )
    330340        )
    331         AND $load > _ECRAN_SECURITE_LOAD // eviter l'evaluation suivante si de toute facon le load est inferieur a la limite
    332         AND rand(0, $load*$load) > _ECRAN_SECURITE_LOAD*_ECRAN_SECURITE_LOAD
     341        and $load > _ECRAN_SECURITE_LOAD // eviter l'evaluation suivante si de toute facon le load est inferieur a la limite
     342        and rand(0, $load * $load) > _ECRAN_SECURITE_LOAD * _ECRAN_SECURITE_LOAD
    333343) {
    334344        header("HTTP/1.0 503 Service Unavailable");
     
    341351}
    342352
    343 
    344 ?>
Note: See TracChangeset for help on using the changeset viewer.