Changeset 65567 in spip-zone


Ignore:
Timestamp:
Sep 5, 2012, 1:22:57 PM (7 years ago)
Author:
cedric@…
Message:

Refactoring et double detection des liens deja dans des spams : si on refuse pas le message a la saisie (seuil <3), on le mets quand meme en spam des qu'un lien est deja dans un spam

Location:
_plugins_/nospam
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/nospam/inc/nospam.php

    r65561 r65567  
    173173}
    174174
     175/**
     176 * Compare les domaines des liens fournis avec la presence dans la base
     177 *
     178 * @param array $liens
     179 *   liste des liens html
     180 * @param int $seuil
     181 *   seuil de detection de presence : nombre d'enregistrement qui ont deja un lien avec le meme domaine
     182 * @param string $table
     183 *   table sql
     184 * @param array $champs
     185 *   champs a prendre en compte dans la detection
     186 * @param null|string $condstatut
     187 *   condition sur le statut='spam' pour ne regarder que les enregistrement en statut spam
     188 * @return bool
     189 */
     190function rechercher_presence_liens_spammes($liens,$seuil,$table,$champs,$condstatut=null){
     191        include_spip("inc/filtres");
     192
     193        if (is_null($condstatut))
     194                $condstatut = "statut=".sql_quote('spam');
     195        if ($condstatut)
     196                $condstatut = "$condstatut AND ";
     197
     198        $hosts = array();
     199        foreach ($liens as $lien){
     200                $url = extraire_attribut($lien,"href");
     201                if ($parse = parse_url($url)
     202                  AND $parse['host'])
     203                        $hosts[] = $parse['host'];
     204        }
     205
     206        $hosts = array_unique($hosts);
     207        $hosts = array_filter($hosts);
     208
     209        // pour chaque host figurant dans un lien, regarder si on a pas deja eu des spams avec ce meme host
     210        // auquel cas on refuse poliment le message
     211        foreach($hosts as $h){
     212                $like = " LIKE ".sql_quote("%$h%");
     213                $where = $condstatut . "(".implode("$like OR ",$champs)."$like)";
     214                if (sql_countsel($table,$where)>=$seuil){
     215                        return $h;
     216                }
     217        }
     218        return false;
     219}
    175220?>
  • _plugins_/nospam/nospam/verifier_formulaire_forum.php

    r65562 r65567  
    4545                  AND count($infos['liens'])){
    4646
    47                         $hosts = array();
    48                         foreach ($infos['liens'] as $lien){
    49                                 $url = extraire_attribut($lien,"href");
    50                                 if ($parse = parse_url($url)
    51                                   AND $parse['host'])
    52                                         $hosts[] = $parse['host'];
    53                         }
    5447
    55                         $hosts = array_unique($hosts);
    56                         $hosts = array_filter($hosts);
    57 
    58                         // pour chaque host figurant dans un lien, regarder si on a pas deja eu des spams avec ce meme host
    59                         // auquel cas on refuse poliment le message
    60                         foreach($hosts as $h){
    61                                 if (sql_countsel("spip_forum","statut=".sql_quote('spam')." AND texte LIKE ".sql_quote("%$h%"))>=_SPAM_URL_MAX_OCCURENCES){
    62                                         spip_log("Refus message de forum qui contient un lien vers $h","nospam");
    63                                         $flux['data']['texte'] = _T('nospam:erreur_url_deja_spammee');
    64                                         break; // pas la peine de continuer avec les autres liens
    65                                 }
     48                        if ($h = rechercher_presence_liens_spammes($infos['liens'],_SPAM_URL_MAX_OCCURENCES,'spip_forum',array('texte'))){
     49                                spip_log("Refus message de forum qui contient un lien vers $h","nospam");
     50                                $flux['data']['texte'] = _T('nospam:erreur_url_deja_spammee');
    6651                        }
    6752                }
  • _plugins_/nospam/nospam_pipelines.php

    r65564 r65567  
    155155                                        // s'il y a du contenu caché avec des styles => spam direct
    156156                                        $flux['data']['statut'] = 'spam';
    157                                 }elseif ($infos['nombre_liens'] > 0) {
     157                                }
     158                                elseif ($infos['nombre_liens'] > 0) {
    158159                                        // si un lien a un titre de moins de 3 caracteres, c'est louche...
    159160                                        if ($infos['caracteres_texte_lien_min'] < 3) {
     
    170171                                                        $flux['data']['statut'] = $stat;
    171172                                                        spip_log("\t".$flux['data']['auteur']."\t".$GLOBALS['ip']."\t"."requalifié en ".$stat." car nombre_liens >= ". $s,'nospam');
    172                                                 }       
     173                                                }
     174
     175                                        if ($flux['data']['statut'] != 'spam'){
     176                                                $champs = array_unique(array('texte',$champ));
     177                                                if ($h = rechercher_presence_liens_spammes($infos['liens'],1,'spip_forum',$champs)){
     178                                                        $flux['data']['statut'] = 'spam';
     179                                                        spip_log("\t".$flux['data']['auteur']."\t".$GLOBALS['ip']."\t"."requalifié en spam car lien $h deja dans un spam",'nospam');
     180                                                }
     181                                        }
    173182                                }
    174183                        }
     184
    175185
    176186                        // verifier qu'un message identique n'a pas ete publie il y a peu
  • _plugins_/nospam/plugin.xml

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