Changeset 30260 in spip-zone


Ignore:
Timestamp:
Jul 27, 2009, 8:53:38 AM (10 years ago)
Author:
fil@…
Message:

ecran de securite :

  • numero de version permettant d'eviter de l'appeler deux fois
  • gestion du 503 Retry-After en fonction de la charge serveur
File:
1 edited

Legend:

Unmodified
Added
Removed
  • _core_/securite/ecran_securite.php

    r27939 r30260  
    44 * ecran_securite.php
    55 * ------------------
    6  *
    7  * version 0.5
    8  * 15 avril 2009.
    9  *
    10  * Ce petit script peut etre inclus automatiquement, soit dans
    11  * ecrire/mes_options.php soit avec la commande auto_prepend_file dans
    12  * php.ini ; il essaie de mettre un ecran devant certains des trous de
     6 */
     7
     8define('_ECRAN_SECURITE', '0.6'); // 27 juillet 2009
     9
     10/*
     11 * Ce petit script est inclus automatiquement par SPIP s'il est present
     12 * dans le repertoire config/ ; il peut aussi etre inclus pour tous les
     13 * codes php, avec la commande auto_prepend_file dans php.ini
     14 * Il essaie de mettre un ecran devant certains des trous de
    1315 * securite connus d'anciennes versions de SPIP (et qui ont ete bouches dans
    1416 * les versions officielles).
     
    2022 * Installation :
    2123 *
     24 * trois possibilites :
     25 *
     26 * -- deposer le fichier ecran_securite.php dans le repertoire config/ ;
     27 *
    2228 * -- dans php.ini :
    2329 *    auto_prepend_file '/chemin/vers/ecran_securite.php'
     
    2733 *    php_admin_value auto_prepend_file '/chemin/vers/ecran_securite.php'
    2834 *
    29  * -- soit deposer le fichier ecran_securite.php dans le repertoire ecrire/
    30  *    dans ce meme repertoire, ouvrir ou creer le fichier mes_options.php et y
    31  *    inserer l'instruction suivante :
    32  *     <?php include(dirname(__FILE__).'/ecran_securite.php'); ? >
     35 * Le fichier ecran_securite.php sera charge a chaque "hit" sur le serveur.
    3336 *
    34  * Le fichier ecran_securite.php sera charge a chaque "hit" sur le serveur.
     37 *
     38 * L'ecran de securite reagit aux reglages suivants :
     39 *
     40 * -- define('_ECRAN_SECURITE_LOAD', X);
     41 *    protection anti-bots quand la charge serveur excede X
     42 *    valeur par defaut : 4 ; desactiver : 0
    3543 *
    3644 */
     
    138146}
    139147if (isset($_POST['tmp_lkojfghx3'])){    die();}
     148
     149
     150/*
     151 * Bloque les bots quand le load deborde
     152 *
     153 */
     154define('_ECRAN_SECURITE_LOAD', 4);
     155if (
     156defined('_ECRAN_SECURITE_LOAD')
     157AND _ECRAN_SECURITE_LOAD>0
     158AND $_SERVER['REQUEST_METHOD'] === 'GET'
     159AND strpos($_SERVER['HTTP_USER_AGENT'], 'bot')
     160AND (
     161  (function_exists('sys_getloadavg') AND $load = array_shift(sys_getloadavg()))
     162  OR (@is_readable('/proc/loadavg') AND $load = floatval(file_get_contents('/proc/loadavg')))
     163)
     164AND rand(0, $load*$load) > _ECRAN_SECURITE_LOAD*_ECRAN_SECURITE_LOAD
     165)
     166{
     167        header("HTTP/1.0 503 Service Unavailable");
     168        header("Retry-After: 300");
     169        header("Expires: 0");
     170        header("Cache-Control: no-cache, must-revalidate");
     171        header("Pragma: no-cache");
     172        header("Content-Type: text/html");
     173        die("<html><title>Error 503: Site temporarily unavailable</title><body><h1>Error 503</h1><p>Site temporarily unavailable (load average $load)</p></body></html>");
     174}
     175
     176
Note: See TracChangeset for help on using the changeset viewer.