source: spip-zone/_plugins_/nospam/nospam/verifier_formulaire_forum.php @ 65562

Last change on this file since 65562 was 65562, checked in by cedric@…, 9 years ago

C'est la rentrée, halte au SPAM :

  • un message avec attribut style ou class (hors code ou cadre) est bloqué à la validation
  • un message avec des liens vers un domaine qui apparait déjà dans 3 spams est bloqué à la validation (nombre configurable par _SPAM_URL_MAX_OCCURENCES)
File size: 2.1 KB
Line 
1<?php
2
3/**
4 * Plugin No-SPAM
5 * (c) 2008 Cedric Morin Yterium.net
6 * Licence GPL
7 *
8 */
9
10if (!defined("_ECRIRE_INC_VERSION")) return;
11
12if (!defined('_SPAM_URL_MAX_OCCURENCES')) define('_SPAM_URL_MAX_OCCURENCES',3);
13
14/**
15 * Verification supplementaire antispam sur le formulaire_forum
16 *
17 * @param array $flux
18 * @return array
19 */
20function nospam_verifier_formulaire_forum_dist($flux){
21        $form = $flux['args']['form'];
22        if (!isset($flux['data']['texte'])
23                AND $GLOBALS['meta']['forums_texte'] == 'oui'){
24
25                $texte = _request('texte');
26                include_spip("inc/nospam");
27                // regarder si il y a du contenu en dehors des liens !
28                $caracteres = compter_caracteres_utiles($texte);
29                $min_length = (defined('_FORUM_LONGUEUR_MINI') ? _FORUM_LONGUEUR_MINI : 10);
30                if ($caracteres < $min_length){
31                        $flux['data']['texte'] = _T('forum_attention_dix_caracteres');
32                }
33
34                // regarder si il y a du contenu cache
35                if (!isset($flux['data']['texte'])){
36                        $infos = analyser_spams($texte);
37                        if (isset($infos['contenu_cache']) AND $infos['contenu_cache']){
38                                $flux['data']['texte'] = _T('nospam:erreur_attributs_html_interdits');
39                        }
40                }
41
42                // regarder si il y a des liens deja references par des spammeurs
43                if (!isset($flux['data']['texte'])
44                  AND isset($infos['liens'])
45                  AND count($infos['liens'])){
46
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                        }
54
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                                }
66                        }
67                }
68
69                if (isset($flux['data']['texte']))
70                        unset($flux['data']['previsu']);
71        }
72
73        return $flux;
74}
Note: See TracBrowser for help on using the repository browser.