Changeset 67330 in spip-zone


Ignore:
Timestamp:
Oct 31, 2012, 10:15:38 AM (7 years ago)
Author:
cedric@…
Message:

Strategie AntiFlood?
L'utilisation du champ maj au lieu de date_heure rendait inoperants les criteres de flood avec SQLite.
On en profite pour re-ecrire les clauses avec sql_date_proche plus portable, et ajouter une condition anti-flood supplementaire : en cas de nombreux messages precedents on leve le flag spammeur_connu (meme si pas de spam jusqu'ici), ce qui severise les seuils sur le nombre de lien.

Location:
_plugins_/nospam
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/nospam/nospam_pipelines.php

    r66481 r67330  
    119119                        $spammeur_connu = (!isset($GLOBALS['visiteur_session']['statut']) AND (sql_countsel('spip_forum', '(ip=' . sql_quote($GLOBALS['ip']) . "$email) AND statut='spam'") > 0));
    120120
     121                  // activer aussi le flag spammeur connu en cas de flood, meme si aucune detection spam jusqu'ici
     122                  // on sera plus severe sur les liens dans ce cas
     123                  // cas du spammeur qui envoie que des messages a 3 liens a haute frequence (passe a travers tous les filtres)
     124                  // au bout du 10e message on va moderer tout message avec un lien
     125                  if (!$spammeur_connu){
     126                          if ($nb=sql_countsel('spip_forum','(ip='.sql_quote($GLOBALS['ip']).$email.') AND '.sql_date_proche('date_heure','-30','minute'))>10){
     127                          spip_log("[Flood] $nb message pour (ip=".$GLOBALS['ip']."$email) dans les 30 dernieres minutes",'nospam');
     128                          $spammeur_connu = true;
     129                          }
     130                  }
     131                  if (!$spammeur_connu){
     132                          if ($nb=sql_countsel('spip_forum','(ip='.sql_quote($GLOBALS['ip']).$email.') AND '.sql_date_proche('date_heure','-10','minute'))>5){
     133                          spip_log("[Flood] $nb message pour (ip=".$GLOBALS['ip']."$email) dans les 10 dernieres minutes",'nospam');
     134                          $spammeur_connu = true;
     135                          }
     136                  }
     137
    121138                        // si c'est un spammeur connu,
    122139                        // verifier que cette ip n'en est pas a son N-ieme spam en peu de temps
     
    126143                                // ou plus de 30 spams dans la dernieres 1h, faut se calmer ...
    127144                                if (
    128                                         ($nb = sql_countsel('spip_forum', 'statut=\'spam\' AND (ip=' . sql_quote($GLOBALS['ip']) . $email . ') AND maj>DATE_SUB(NOW(),INTERVAL 120 minute)')) > 10
     145                                        ($nb = sql_countsel('spip_forum', 'statut=\'spam\' AND (ip=' . sql_quote($GLOBALS['ip']) . $email . ') AND ' . sql_date_proche('date_heure','-120','minute'))) > 10
    129146                                        OR
    130                                         ($nb = sql_countsel('spip_forum', 'statut=\'spam\' AND (ip=' . sql_quote($GLOBALS['ip']) . $email . ') AND maj>DATE_SUB(NOW(),INTERVAL 60 minute)')) > 30
    131                                 ) {
     147                                        ($nb = sql_countsel('spip_forum', 'statut=\'spam\' AND (ip=' . sql_quote($GLOBALS['ip']) . $email .') AND ' . sql_date_proche('date_heure','-60','minute'))) > 30
     148                                        ){
    132149                                        $flux['data']['statut'] = ''; // on n'en veut pas !
    133150                                        spip_log("[Refuse] $nb spam pour (ip=" . $GLOBALS['ip'] . "$email) dans les 2 dernieres heures", 'nospam');
     
    197214                        // plus de 5 messages en 5 minutes c'est suspect ...
    198215                        if ($flux['data']['statut'] != 'spam') {
    199                                 if (($nb = sql_countsel('spip_forum', 'ip=' . sql_quote($GLOBALS['ip']) . ' AND maj>DATE_SUB(NOW(),INTERVAL 5 minute)')) > 5)
     216                                if (($nb = sql_countsel('spip_forum', 'ip=' . sql_quote($GLOBALS['ip']) . ' AND ' . sql_date_proche('date_heure','-5','minute'))) > 5)
    200217                                        $flux['data']['statut'] = 'spam';
    201218                                #spip_log("$nb post pour l'ip ".$GLOBALS['ip']." dans les 5 dernieres minutes",'nospam');
  • _plugins_/nospam/plugin.xml

    r65576 r67330  
    1010        <icon>images/nospam-32.png</icon>
    1111        <licence>(c) 2008 GPL</licence>
    12         <version>1.0.3</version>
     12        <version>1.0.4</version>
    1313        <etat>stable</etat>
    1414        <description><multi>
Note: See TracChangeset for help on using the changeset viewer.