Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

Nouveau plugin : obfuscation automatique d'email
#1

Bonjour, je voudrais vous soumettre ce petit plugin qui transforme automatiquement toutes les adresses email des content, blocs de contenu, news... en {mailto address="adresse@domaine.tld" encode="javascript"} afin de les cacher aux robots spammeurs.
Ce plugin fonctionne avec toute adresse email valide ainsi qu'avec les <a href=mailto: même s'il y a une classe ou autre attribut dans le lien.

Attention, il faut vider le cache du cms ainsi que le cache du navigateur.

Télécharger le plugin pour cmsms 1.11 svn 8200+ (à dézipper dans le répertoire plugins).
Télécharger le plugin pour cmsms 1.10.3 et inférieurs (à dézipper dans le répertoire plugins).

Codes pour 1.10.3 et 1.11 : http://www.cmsmadesimple.fr/forum/viewto...183#p29183
Répondre
#2

On écrit comment l'adresse mail dans la page (content) y a un codage à faire ?

parce sinon marche po sur v 1.11 Wink

J-C Etiemble v 2.2.xx
Répondre
#3

Petite amélioration, j'ai édité le post précédent.
Il suffit d'écrire nom@mondomaine.com dans un contenu.
Testé sur 1.10.3.
Je teste maintenant sur 1.11
Répondre
#4

marche pas sur v 1.11 pour moi test avec nom@mondomaine.com et <a class="external" href="mailto:nom@mondomaine.com">contact</a>

J-C Etiemble v 2.2.xx
Répondre
#5

Marche pas sur 1.11 :mad:
Voici le code modifié pour 1.11 (nom du fichier : prefilter.protect_email.php)
Code :
<?php
// put this in your application
function smarty_prefilter_protect_email($tpl_output, &$template)
{
    $smarty = $template->smarty;
    $result = explode(':', $smarty->_current_file);
    if (count($result) > 0)
    {
        if( startswith($result[0],'tmp_') ) $result[0] = 'template';
        if ($result[0] == 'content' || $result[0] == 'template' || $result[0] == 'globalcontent')
        {
        $patterns = array ('#(<a).+(href="mailto:)([a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4})"(.+)(</a>)#iU',
                   '#[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}#i');
        $replace = array ('$3', '{mailto address=$0 encode="javascript"}');
        $tpl_output = preg_replace($patterns, $replace, $tpl_output);
        }
    }
    return $tpl_output;
}
?>
Je me suis basé sur la différence entre l'ancien et le nouveau prefilter.precompilefunc.php
Quelqu'un peut-il m'aider ?
Répondre
#6

D'aprés Calguy -> Fixé en SVN. Rev 8193 -- Fixes problems with third party pre, post, and output filters
http://viewsvn.cmsmadesimple.org/revisio...e&rev=8193

testé ton code mais marche pas semble t-il


En version 1.10.3 ça marche mais pas a tous les coups et de plus ça fout un b...del terrible si on a déjà des balises
{mailto address="xxxx@xx.fr" encode="javascript ....

J-C Etiemble v 2.2.xx
Répondre
#7

Ok, j'ai encore du modifier car le plugin ne passait pas dans tous les types de contenus.
Voici la version qui fonctionne avec la 8193 :
Télécharger le plugin (à dézipper dans le répertoire /plugins de votre installation)
ou :
Code :
<?php
function smarty_prefilter_protect_email($tpl_output, &$template)
{
    $smarty = $template->smarty;
        $result = explode(':', $smarty->_current_file);
    $patterns = array ('#(<a).+(href="mailto:)([a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4})"(.+)(</a>)#iU',
                   '#[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}#i');
    $replace = array ('$3', '{mailto address="$0" encode="javascript"}');
    if (count($result) > 1)
    {
      if (startswith($result[0],'tmp_')) $result[0] = 'template';
        switch ($result[0])
        {
        case 'stylesheet':
            break;
        case "content":
            $tpl_output = preg_replace($patterns, $replace, $tpl_output);
            break;
        case 'tpl_top':
        case 'tpl_body':
        case 'tpl_head':
        case "template":
            $tpl_output = preg_replace($patterns, $replace, $tpl_output);
            break;
        case "globalcontent":
            $tpl_output = preg_replace($patterns, $replace, $tpl_output);
            break;
        default:
            break;
        }
    }
    
    $tpl_output = preg_replace($patterns, $replace, $tpl_output);
    return $tpl_output;
}
?>
Il faut nommer ce plugin : prefilter.protect_email.php et le placer dans le répertoire plugins.
Vider le cache (je vide généralement en supprimant les fichiers de tmp/template_c).
Enjoy Smile

Fonctionne avec nom@domaine.com et <a ... href="mailto:nom@domaine.com" ...>...</a>.
Attention, vous devrez enlever les balises {mailto ...} qui seraient déjà dans votre site et les remplacer par nom@domaine.com.
Si vous souhaitez voir un texte autre que nom@domaine.com apparaître sur la page, il suffit de modifier le plugin à cette ligne :
Code :
$replace = array ('$3', '{mailto address="$0" encode="javascript"}');
en insérant le paramètre text="texte"
Ex : $replace = array ('$3', '{mailto address="$0" text="email" encode="javascript"}');
Répondre
#8

jce76350 a écrit :En version 1.10.3 ça marche mais pas a tous les coups et de plus ça fout un b...del terrible si on a déjà des balises
{mailto address="xxxx@xx.fr" encode="javascript ....
Il faut vider complètement le cache et effectivement, il faut enlever les {mailto} préexistant.
Je pourrais les faire réécrire si tu trouves que ça en vaut vraiment la peine.
Répondre
#9

OK pour la 1.11 c'est tout bon
sauf Notice: Undefined variable: result in \plugins\prefilter.protect_email.php

il faut initialiser la variable Wink -> $result ='';

C'est super pour ceux qui ne veulent pas se casser la tête
Le plus_du_plus se serait de pouvoir insérer le text="ce que je veux" en direct de la page Wink

- pour moi je préfère utiliser la balise Smarty direct parce c'est plus modifiable à mon gout ( mais je suis tatillon)

J-C Etiemble v 2.2.xx
Répondre
#10

Oups, il manque une ligne, je corrige de suite.
Citation :Le plus_du_plus se serait de pouvoir insérer le text="ce que je veux" en direct de la page
De quelle manière ?
Si je mets un param dans le plugin, ça ne marchera plus, il faudrait que je le transforme en modifier qui devrait être collé dans le gabarit.
Répondre
#11

Citation :De quelle manière ?
C'était une idée... mais non réalisable

J-C Etiemble v 2.2.xx
Répondre
#12

Ok Smile
J'en profite pour te dire que tu as une erreur dans le gabarit minimal template :
{content}
</div>
{cms_selflink dir="previous"espace} - {cms_selflinkdir="next"}
Smarty 3 est devenu très chatouilleux et il refuse les espaces avant } et il manque, par contre une espace entre selflink et dir
Répondre
#13

Citation :{cms_selflink dir="previous"espace} - {cms_selflinkdir="next"}

OK merci j'ai viré les balises lang "fr_FR" et loupé l'espace - je corrige il y a une erreur dans plusieurs gabarits

J-C Etiemble v 2.2.xx
Répondre
#14

Citation :pour moi je préfère utiliser la balise Smarty direct parce c'est plus modifiable à mon gout ( mais je suis tatillon)
Oui, mais normalement, ce n'est pas toi qui rempli le site, ce sont des rédacteurs sans connaissance qui, généralement, font un copier-coller à partir d'autres sites pour leurs news et qui n'en ont rien à faire de crypter les emails (ils ne comprennent déjà pas ce que ça veut dire Wink ).
Répondre
#15

Citation :Oui, mais normalement, ce n'est pas toi qui rempli le site

Oui tu as raison, c'est pourquoi je disait que ton plugin est "C'est super pour ceux qui ne veulent pas se casser la tête"
Tu vas pouvoir le vendre Wink mais il faut que tu mettes quelques détails d'aide

J-C Etiemble v 2.2.xx
Répondre
#16

Les prefilter et les postfilter n'apparaissent plus dans "balises", donc plus de "à propos" ou d'aide.
Je vais y penser.
Merci de tes retours.
Répondre
#17

Grosse amélioration du plugin :
Il ne convertit plus les {mailto} préexistants, ce qui laisse au rédacteur la possibilité de convertir des adresses spécifiques (pour Jce Smile .
Il encode les mails comprenant des subjects et autres attributs comme cc, bcc (mais ne les utilise pas. Si vous souhaitez cet ajout, contactez-moi).
Ex :
  • <a href='mailtoConfusedomeone@example.com?Subject=Hello%20again'> Send Mail</a>
  • <a href="mailto:chose@bidule.fr?subject=Coucou&amp;cc=cc1@bidule.fr&amp;bcc=cc2@bidule.fr">ici</a>
  • <a class="test" href="mailto:blabla@truc.com">double</a>
  • <a href="mailto:BLAbla@truc.com" class="test">test</a>
  • seul@domaine.com
Télécharger le plugin pour cmsms 1.11 svn 8200+ (à dézipper dans le répertoire plugins).
OU code pour 1.11 svn 8200+
Code :
<?php
#CMS - CMS Made Simple
#(c)2004 by Ted Kulp (wishy@users.sf.net)
#This project's homepage is: http://www.cmsmadesimple.org
#
#This program is free software; you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation; either version 2 of the License, or
#(at your option) any later version.
#
#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#GNU General Public License for more details.
#You should have received a copy of the GNU General Public License
#along with this program; if not, write to the Free Software
#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

# Put this file into the 'plugins' directory and name it 'prefilter.nonbreaking_characters.php'
# The plugin encode all email adresses into javascript
#
# It convert :
# <a href='mailto:someone@example.com?Subject=Hello%20again'> Send Mail</a></p>
# <a href="mailto:chose@bidule.fr?subject=Coucou&amp;cc=cc1@bidule.fr&amp;bcc=cc2@bidule.fr">ici</a></p>
# <a class="test" href="mailto:blabla@truc.com">double</a></p>
# <a href="mailto:BLAbla@truc.com" class="test">test</a>
# seul@domaine.com
#
# It does not convert {mailto address="nom@domaine.com" text="smarty" encode="javascript"}
#
# Requirements : cmsms 1.11 svn 8200+

function smarty_prefilter_protect_email($tpl_output, &$template)
{
    $smarty = $template->smarty;
    $result = explode(':', $smarty->_current_file);
    if (count($result) > 0)
    {
        if( startswith($result[0],'tmp_') ) $result[0] = 'template';
        if ($result[0] == 'content' || $result[0] == 'globalcontent' || $result[0] == 'template' || strlen($result[0]) == '40')
        // evaluated template a disparu depuis cmsms 1.10.3 et a été remplacé par une string de 40 caractères
        // Si un global content block pose problème, vous empêcher le plugin d'y entrer en ajoutant || $result[1] == 'nom du GCB' dans la condition ci-dessus
        {        
            $patterns = array ('#<a.+href=["\']mailto:([a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4})\b\??[^"\']*["\'][^>]*>([^<]+)</a>#iU',
                   '#([a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4})\b(?!\?|&|"|\'])#iU');
            // Vous pouvez remplacer la valeur de text : {mailto address="$1" text="email" encode=javascript}
            // et utiliser d'autres attributs : {mailto address="$1" text="email" encode="hex" subject="Hello to you!"}
            // voir doc smarty : http://www.smarty.net/docs/en/language.function.mailto.tpl
            $replace = array ('{mailto address="$1" text="$2" encode="javascript"}', '{mailto address="$0" text="$0" encode="javascript"}');
            $tpl_output = preg_replace($patterns, $replace, $tpl_output);        
        }
    }    
    return $tpl_output;        
}

function smarty_cms_about_prefilter_protect_email()
{
    ?>
    <p>Author: Jean le Chauve&lt; (http://www.cmsmadesimple.fr/forum) &gt;</p>
    <p>Version: 1.0</p>
    <p>
    Change History:<br/>
    None
    </p>
    <?php
}
?>

Télécharger le plugin pour cmsms 1.10.3 et inférieurs (à dézipper dans le répertoire plugins).
OU code pour 1.10.3 et versions inférieures
Code :
<?php
#CMS - CMS Made Simple
#(c)2004 by Ted Kulp (wishy@users.sf.net)
#This project's homepage is: http://www.cmsmadesimple.org
#
#This program is free software; you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation; either version 2 of the License, or
#(at your option) any later version.
#
#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#GNU General Public License for more details.
#You should have received a copy of the GNU General Public License
#along with this program; if not, write to the Free Software
#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

# Put this file into the 'plugins' directory and name it 'prefilter.nonbreaking_characters.php'
# The plugin encode all email adresses into javascript
#
# It convert :
# <a href='mailto:someone@example.com?Subject=Hello%20again'> Send Mail</a></p>
# <a href="mailto:chose@bidule.fr?subject=Coucou&amp;cc=cc1@bidule.fr&amp;bcc=cc2@bidule.fr">ici</a></p>
# <a class="test" href="mailto:blabla@truc.com">double</a></p>
# <a href="mailto:BLAbla@truc.com" class="test">test</a>
# seul@domaine.com
#
# It does not convert {mailto address="nom@domaine.com" text="smarty" encode="javascript"}
#
# Requirements : cmsms 1.10.3 max.

function smarty_cms_prefilter_protect_email($tpl_output, &$smarty)
{
    $result = explode(':', $smarty->_current_file);
    if (count($result) > 0)
    {
        if ($result[0] == 'content' || $result[0] == 'temporary template' || $result[0] == 'globalcontent' || $result[0] == 'evaluated template')
        // Si un global content block pose problème, vous pouvez empêcher le plugin d'y entrer en ajoutant || $result[1] == 'nom du GCB' dans la condition ci-dessus
        {        
            $patterns = array ('#<a.+href=["\']mailto:([a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4})\b\??[^"\']*["\'][^>]*>([^<]+)</a>#iU',
                   '#([a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4})\b(?!\?|&|"|\'])#iU');
            // Vous pouvez remplacer la valeur de text. Ex. : {mailto address="$1" text="email" encode=javascript}
            // et utiliser d'autres attributs : {mailto address="$1" text="email" encode="hex" subject="Hello to you!"}
            // voir doc smarty : http://www.smarty.net/docs/en/language.function.mailto.tpl
            $replace = array ('{mailto address="$1" text="$2" encode="javascript"}', '{mailto address="$0" text="$0" encode="javascript"}');
            $tpl_output = preg_replace($patterns, $replace, $tpl_output);        
        }
    }    
    return $tpl_output;        
}

function smarty_cms_about_prefilter_protect_email()
{
    ?>
    <p>Author: Jean le Chauve&lt; (http://www.cmsmadesimple.fr/forum) &gt;</p>
    <p>Version: 1.0</p>
    <p>
    Change History:<br/>
    None
    </p>
    <?php
}
?>

Enjoy Smile
Répondre
#18

ça bosse-phore

V1.11 rev -8203-Fr”

>Il ne convertit plus les {mailto} préexistants,
en tout ça fout le bazar si on en a car ils ne s'affichent plus dans le bloc Et Uniquement sous windauble
sous un serveur Linux

j'ai du texte ... dans un bloc de contenu
Code :
Avant de poser vos questions lisez ...
{mailto address="xxx@free.fr" encode="javascript" text="Sur demande" subject="_tracfoil1a1_adrespostale"}<br /> <br /> <img .... /> FRANCE<br /><br /><br />
<img  ... /><strong>{mailto address="xxx@free.fr" encode="javascript" text="Contact mail" subject="_tracfoil1a1_site_contact"}<br /><br />
{mailto address="xxx@gmail.com" encode="javascript" text="email alternatif" subject="_tracfoil1a1_site_contactgm"}<br /><br /><br />
</strong> <a href="mailto:someone@example.com?Subject=Hello_again">Contacter moi</a>
et je ne vois que
Avant de poser vos questions lisez .... someone@example.com


>convertir des adresses spécifiques
merci mais marche pas
j'ai
Code :
<a href="mailto:someone@example.com?Subject=Hello_again">Contacter moi</a>
et je vois sur la page le lien : someone@example.com

J-C Etiemble v 2.2.xx
Répondre
#19

Ohoh Sad
Je vérifie à nouveau
Répondre
#20

Petite erreur : modifie $replace = array ('{mailto address="$1" text="$1" encode="javascript"}', '{mailto address="$0" text="$0" encode="javascript"}');
par
$replace = array ('{mailto address="$1" text="$2" encode="javascript"}', '{mailto address="$0" text="$0" encode="javascript"}');

J'ai mis à jour les codes et zip.

Merci de ton attention.
Répondre
#21

>J'ai mis à jour les codes et zip.
super,Votre Seigneurie, c'est tout-bon Wink sous Win et linux

J-C Etiemble v 2.2.xx
Répondre
#22

Merci, ça fait plaisir Smile
Répondre
#23

On pourrait prendre ça pour du harcèlement, mais j'ai un petit souci avec le plugin.

Ma page contact (http://www.reflexions3.be/contact), elle se charge, puis devient blanche avec seulement l'adresse mail de contact en haut de page...

Puis-je modifier quelque chose?

Je vais le désactiver temporairement...

Cordialement,
Piet
Répondre
#24

Je viens de le remarquer.
Donne-moi le contenu de ta page contact, et également as-tu bien pris le plugin correspondant à ta version : 1.11+ ou 1.10.3-
Répondre
#25

Je crois que tu as totalement oublié les {literal}code js{/literal} dans tes gabarits.
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 2 visiteur(s)