[SPIP Zone] forms&tables, mailcrypt, propre

Bonjour,

J'ai réglé mes soucis de protection des emails dans forms_et_tables_1_9_1 en rajoutant |propre dans les modèles qui m'intéressaient du plugin forms.

J'ai donc importé dans mon dossier squelettes/modeles les fichiers :

donnee.html
et remplacé la ligne
[(#GET{donnee}|wrap_champ{#HTML_WRAP})]
par
[(#GET{donnee}|wrap_champ{#HTML_WRAP}propre)]

  et table.html
remplacé la ligne
<td ><span class='#_donnees:EDIT{#CHAMP}'>#LESVALEURS{'<br />'}</span></td>
par
<td ><span class='#_donnees:EDIT{#CHAMP}'>[(#LESVALEURS{'<br />'}|propre)]</span></td>

Je n'ai pas testé beaucoup de cas, c'est pour ça que je n'ai pas eu besoin des autres modèles, j'imagine. J'espère que ça ne casse rien par ailleurs. Avant de passer en prod je ferai la même modif sur les autres modèles.

Concernant la doc du plugin mailcrypt (le fichier readme.txt)j'ai trouvé quelque petits soucis :
- chez moi la balise qui marche c'est #CRYPTM_IMP (et non pas #CRYPTM). (c'est pourtant bien indiqué dans le fichier plugin.xml ... mais j'ai cherché...)
- est-ce qu'il serait possible de rajouter dans ce fichier le genre de manips que j'ai faite. Ca ne marche peut-être pas partout, mais je l'ai essayé aussi sur #INTRODUCTION et ça marche là aussi.(j'avais fait un essai avec un email très vite dans l'article, il remontait sur la page d'accueil !)
- le lien de contrib est cassé. Je suppose qu'il s'agit de cet article :
http://www.spip-contrib.net/Mailcrypt-systeme-antispam (là dans le fichier plugin.xml ce n'est pas à jour)

Voilà, en tout cas merci pour ces plugins qui sont très efficaces.

Cordialement,
Jacques

jack a écrit :

Bonjour,

J'ai réglé mes soucis de protection des emails dans forms_et_tables_1_9_1 en rajoutant |propre dans les modèles qui m'intéressaient du plugin forms.

C'est un peu violent, surtout que |typo est deja appliqué automatiquement sur les champs de type email
Soit mailcrypt passe dans typo en plus de propre
Soit on definit carrement une api commune du type une fonction
inc_proteger_email_dist()
definie dans un inc/proteger_email.php
que chacun (core, plugins ...) appelera sur le mode

$proteger_email = charger_fonction('proteger_email');
$email = $proteger_email($email);

Dans le core, la protection serait desactivée (la fonction ne faisant rien).
Cette api permettrai ensuite à tout plugin de mettre en place la protection qui lui semble la meilleure.

Cedric

jack wrote:

Concernant la doc du plugin mailcrypt (le fichier readme.txt)j'ai trouvé quelque petits soucis :
- chez moi la balise qui marche c'est #CRYPTM_IMP (et non pas #CRYPTM).

...

- le lien de contrib est cassé.

OK, Merci ! Réparé. Et j'ai passé le plugin en "stable". Je vais aussi metttre l'article à jour sur spip-contrib.

Paolo

cedric morin wrote:

Soit mailcrypt passe dans typo en plus de propre
Soit on definit carrement une api commune du type une fonction
inc_proteger_email_dist()
definie dans un inc/proteger_email.php
que chacun (core, plugins ...) appelera sur le mode

$proteger_email = charger_fonction('proteger_email');
$email = $proteger_email($email);

Dans le core, la protection serait desactivée (la fonction ne faisant rien).
Cette api permettrai ensuite à tout plugin de mettre en place la protection qui lui semble la meilleure.

Bonjour !

Je pense que tu entrevois la meilleure façon de régler ça, Cédric. D'avance je suis d'accord :slight_smile: 'Mailcrypt' a été codé, aux limites de mes capacités, car je ne pouvais pas faire sans (Comme on dit: "Necessity is the mother of invention").

Je me réjouirais si quelqu'un d'autre ajoute quelque chose à Mailcrypt, ou ouvre une possibilité dans le core de tout faire plus proprement.

Paolo

Je me réjouirais si quelqu'un d'autre ajoute quelque chose à Mailcrypt, ou ouvre une possibilité dans le core de tout faire plus proprement.

Paolo

Ca fait un moment que je pense à intégrer une lame au couteau suisse à ce sujet, c'est même une de mes premières idées. tout est là pour le faire, juste savoir si la méthode employée est bien solide.

Pat

Pat a écrit :

Je me réjouirais si quelqu'un d'autre ajoute quelque chose à Mailcrypt, ou ouvre une possibilité dans le core de tout faire plus proprement.

Paolo

Ca fait un moment que je pense à intégrer une lame au couteau suisse à ce sujet, c'est même une de mes premières idées. tout est là pour le faire, juste savoir si la méthode employée est bien solide.

Bonjour Pat,

En ce qui concerne la solidité, on a vu qu'il faudrait étendre le plugin à typo en plus de propre. Si tu peux faire ça ça serait très bien : ça éviterait à des bricoleurs de mon genre de faire des choses "violentes" :wink:

Mais je crois que ce qui serait mieux ce serait que quelqu'un mette en musique l'idée de Cédric : intégrer au core une protection des mails que les plugins n'auraient plus qu'à récupérer.
Ce besoin me semble suffisamment universel... Si quelqu'un a le temps de le coder :slight_smile:

bonne soirée,
Jacques

jack a écrit :

Pat a écrit :

Je me réjouirais si quelqu'un d'autre ajoute quelque chose à Mailcrypt, ou ouvre une possibilité dans le core de tout faire plus proprement.

Paolo

Ca fait un moment que je pense à intégrer une lame au couteau suisse à ce sujet, c'est même une de mes premières idées. tout est là pour le faire, juste savoir si la méthode employée est bien solide.

Bonjour Pat,

En ce qui concerne la solidité, on a vu qu'il faudrait étendre le plugin à typo en plus de propre. Si tu peux faire ça ça serait très bien : ça éviterait à des bricoleurs de mon genre de faire des choses "violentes" :wink:

Alors en post_typo, le pb c'est que les liens SPIP ne sont pas encore changés... Ils se présentent sous la forme : @@SPIP_ECHAPPE_LIEN_$i@@
On ne peut donc pas faire gd chose à ce niveau là...

Du coup je propose de passer ce système en post_propre, et je propose dans le couteau suisse la fonction suivante :

define('_mailcrypt_AROBASE', '..&aring;t..'); // tip visible onMouseOver
define('_mailcrypt_MAIL', '['.ucfirst(_T('email')).']'); // affichage par defaut d'un lien mail sans texte

function mailcrypt_rempl($texte) {
  if (strpos($texte, '@')===false) return $texte;
  
  // liens HTML
  $texte = preg_replace(",[\"\']mailto:([^@\"']+)@([^\"']+)[\"\'],", '"#" title="$1' . _mailcrypt_AROBASE . '$2" onclick="location.href=lien(this.title); return false;"', $texte);
  if (strpos($texte, '@')===false) return $texte;

  // nettoyage total, on ne sait jamais... regexp trouvee dans l'outil "liens orphelins"
  $autorises = '\!\#\$\%\&\'\*\+\-\/\=\?\^\_\`\.\{\|\}\~a-zA-Z0-9';
  $texte = preg_replace(",\b[{$autorises}]*@[a-zA-Z][a-zA-Z0-9-]*\.[a-zA-Z]+(\?[{$autorises}]*)?,", _mailcrypt_MAIL, $texte);
  return $texte;
}

La fonction javascript appelée est celle-ci :

function lien(ad)
   { return 'mailto:’ + ad.replace(/\.\..+t\.\./,'@'); }

Ce travail est basé sur le plugin MailCrypt de Alexis et Paolo

Pat

Pat a écrit :

Du coup je propose de passer ce système en post_propre, et je propose dans le couteau suisse la fonction suivante :

Bonsoir,
Est-ce que ce ne serait pas un peu précipité tout ça ?
J'ai donc mis à jour ma version de couteau_suisse et j'ai désactivé le plugin mailcrypt. Voici le résultat de mes tests :
- premier étonnement, l'emplacement de l'option qui est dans amélioration typographique. A mon sens il ne s'agit pas d'amélioration typographique mais bien d'administration. On décide ou pas de protéger les mails publiés sur son site.
- Une fois activé mes articles retrouvent le codage des emails, et on peut bien envoyer un email
- zut, dans le source une arobase... Ouf, il s'agit probablement d'une balise mal fermée quelque part :

<script type="text/javascript"><!--
function lien(ad){ return 'mailto:’ + ad.replace(/\.\..+t\.\./,'@'); }
// --></script><!-- Fin header du Couteau Suisse -->

- par contre où est passé le js qui permettait d'imprimer l'article avec les emails en clair ?
- Je retourne sur mon formulaire, ok rien n'a changé (sauf le lien vers le popup d'impression).
- Pour voir jusqu'au bout je supprime les modèles où j'avais rajouté propre... argghhh... tout est en clair...

Alors pour que cette lame apporte vraiment quelque chose il faudrait :
- réintégrer l'option d'impression
- Faute de proposer une amélioration sur le plugin original, il faudrait au moins signaler les limitations. (bien expliquer que là où il n'y a pas propre les robots vont pouvoir faire leur marché)

Voilà,
Bonne soirée,
Jacques

jack a écrit :

Pat a écrit :

Du coup je propose de passer ce système en post_propre, et je propose dans le couteau suisse la fonction suivante :

Bonsoir,
Est-ce que ce ne serait pas un peu précipité tout ça ?
J'ai donc mis à jour ma version de couteau_suisse et j'ai désactivé le plugin mailcrypt. Voici le résultat de mes tests :
- premier étonnement, l'emplacement de l'option qui est dans amélioration typographique. A mon sens il ne s'agit pas d'amélioration typographique mais bien d'administration. On décide ou pas de protéger les mails publiés sur son site.

Tu as sans doute raison, "Amélioration typographique" n'est pas le bon titre pour ça. En tout cas l'idée de base était de regrouper dans cette rubrique tous les outils qui modifient certains éléments d'un texte avant de l'afficher à l'écran, sans modifier quoi que ce soit en base.

- Une fois activé mes articles retrouvent le codage des emails, et on peut bien envoyer un email

Ah? pourtant mes tests font tout disparaître... tu as bien coché l'outil en question et recalculé la page !?
Ces mails là ne sont-ils pas dans des espaces protégés ? il faudrait que tu expliques mieux le contexte de ces mails restés en clair...

- zut, dans le source une arobase... Ouf, il s'agit probablement d'une balise mal fermée quelque part :

<script type="text/javascript"><!--
function lien(ad){ return 'mailto:’ + ad.replace(/\.\..+t\.\./,'@'); }
// --></script>

Euh? Je ne comprends pas ce que tu veux dire...

- par contre où est passé le js qui permettait d'imprimer l'article avec les emails en clair ?

Le js était tout petit : il est passé en "code inline" dans le fichier config_outils.php, ligne 514.
Dans une prochaine version, le plugin devrait compiler tous les codes inline js inroduits par les outils activés pour ne faire qu'un seul fichier plus facilement mis en cache par les navigateurs. là, le code est visible en clair entre <head> et </head>. l'optimisation est prévue.

- Je retourne sur mon formulaire, ok rien n'a changé (sauf le lien vers le popup d'impression).

Le popup d'impression était une caractéristique du plugin d'origine... Je ne suis pas sûr que cette solution soit la meilleure, en tout cas universelle. J'avoue que les popups, je kiffe pas trop... Certains squelettes possèdent un fichier html spécial impression.
Je n'ai porté dans un premier temps *que* la fonction de transformation des adresses, dans laquelle j'ai amélioré le traitement des regexp. Le reste est encore à réfléchir.
La fonctionnalité doit rester simple au sein du couteau suisse, sinon un plugin à part entière restera la meilleure solution.
Il est bon de savoir que le Couteau Suisse intègre un filtre cs_imprimer qui permet de rendre un texte imprimable en supprimant les codes indésirables ou en modifiant un peu la destination d'un outil donné. Par exemple, la découpe en pages rend un texte complet et non découpé, mais dont les pages sont séparées par un léger filet.
Pour que mailcrypt puisse agir sur le filtre cs_imprimer, il faut qu'il existe une fonction mailcrypt_imprimer($texte) dans le fichier mailcrypt _fonctions.php.
Ce filtre pourrait donc rendre claires les adresses cachées à l'écran (actuellement remplacées par "[Email]") à l'aide d'une image "arobase.gif" par exemple ou de tout autre moyen.
Attention toutefois à différencier les adresses qu'on peut changer en image, et celles qui sont dans les titres : title="toto@ici.com"
Ma préférence serait donc de garder un fichier impression.html avec des balise du genre [(#TEXTE|cs_imprimer)]

- Pour voir jusqu'au bout je supprime les modèles où j'avais rajouté propre... argghhh... tout est en clair...

Encore ? (voir plus haut)
As-tu vraiment activé l'outil ? Il n'y a pas grand chose dans SPIP qui ne passe pas par 'propre' pourtant...
Je viens de committer quelques tests réussis qu'on peut voir ici :
  ecrire/?exec=test_couteau_suisse
J'ai pu voir que le texte donné à post_typo protégeait les raccourcis SPIP, donc impossible d'agir un antispam à ce niveau. Seuls les raccourcis HTML étaient traitables.
En revanche, en post_propre, tous les raccourcis SPIP sont alors effectués, et donc un traitement des balises <a> suffit.

Alors pour que cette lame apporte vraiment quelque chose il faudrait :
- réintégrer l'option d'impression

voir plus haut

- Faute de proposer une amélioration sur le plugin original, il faudrait au moins signaler les limitations. (bien expliquer que là où il n'y a pas propre les robots vont pouvoir faire leur marché)

+1
Attention donc aux balises étoilées : #TEXTE*

Pat

Bonsoir,
ce soir je viens de procéder à la mise à jour de couteau_suisse sur mon site en local et je re-explique mes tests :

Pat a écrit :

Tu as sans doute raison, "Amélioration typographique" n'est pas le bon titre pour ça. En tout cas l'idée de base était de regrouper dans cette rubrique tous les outils qui modifient certains éléments d'un texte avant de l'afficher à l'écran, sans modifier quoi que ce soit en base.

Rien de changé, mais pas grave. Il suffit de savoir où c'est.

- Une fois activé mes articles retrouvent le codage des emails, et on peut bien envoyer un email

Ah? pourtant mes tests font tout disparaître... tu as bien coché l'outil en question et recalculé la page !?

Bon on se comprend pas. Le plugin remplit là exactement sa fonction. Je clicke sur l'email crypté et le mail part. C'est le fonctionnement normal de mailcrypt.

<script type="text/javascript"><!--
function lien(ad){ return 'mailto:’ + ad.replace(/\.\..+t\.\./,'@'); }
// --></script>

Euh? Je ne comprends pas ce que tu veux dire...

Autant pour moi, c'est simplement que je n'ai pas l'habitude de voir le javascript en clair dans le source du head. En général on apprend qu'il vaut mieux un fichier externe à la page. Mais bon c'est pas grave non plus.

Le popup d'impression était une caractéristique du plugin d'origine... Je ne suis pas sûr que cette solution soit la meilleure, en tout cas universelle. J'avoue que les popups, je kiffe pas trop... Certains squelettes possèdent un fichier html spécial impression.

En tout cas moi je trouve ça très utile, je dirai même indispensable pour l'usage que je veux : présenter un annuaire de personnes (basés sur forms). Il faut donc que les gens soient capables d'imprimer les adresses en clair pour les avoir au propre et... s'en servir !

Je n'ai porté dans un premier temps *que* la fonction de transformation des adresses, dans laquelle j'ai amélioré le traitement des regexp. Le reste est encore à réfléchir.

OK

La fonctionnalité doit rester simple au sein du couteau suisse, sinon un plugin à part entière restera la meilleure solution.

Ben oui, mais pour moi ce serait dommage d'avoir d'un côté le plugin mailcrypt activé, et de l'autre le couteau_suisse avec deux ou trois fonctionnalités activées, et le mailcrypt désactivé dans ce couteau_suisse... C'est peut-être pas grave, mais ça me donne l'impression d'avoir des choses en double pour rien.

Il est bon de savoir que le Couteau Suisse intègre un filtre cs_imprimer qui permet de rendre un texte imprimable en supprimant les codes indésirables ou en modifiant un peu la destination d'un outil donné. Par
exemple, la découpe en pages rend un texte complet et non découpé, mais dont les pages sont séparées par un léger filet.
Pour que mailcrypt puisse agir sur le filtre cs_imprimer, il faut qu'il existe une fonction mailcrypt_imprimer($texte) dans le fichier mailcrypt _fonctions.php.
Ce filtre pourrait donc rendre claires les adresses cachées à l'écran (actuellement remplacées par "[Email]") à l'aide d'une image "arobase.gif" par exemple ou de tout autre moyen.

Je crois que c'est ce que fait mailcrypt actuellement. Mais oui si tu peux activer ça c'est intéressant, et pourrais m'éviter d'avoir un plugin de plus.

Attention toutefois à différencier les adresses qu'on peut changer en image, et celles qui sont dans les titres : title="toto@ici.com"
Ma préférence serait donc de garder un fichier impression.html avec des balise du genre [(#TEXTE|cs_imprimer)]

- Pour voir jusqu'au bout je supprime les modèles où j'avais rajouté propre... argghhh... tout est en clair...

Encore ? (voir plus haut)

Oui voir plus haut : j'avais commencé par dire que j'activais le plugin...

As-tu vraiment activé l'outil ? Il n'y a pas grand chose dans SPIP qui ne passe pas par 'propre' pourtant...

Je t'invite à relire le titre du post. Il s'agit de formulaires (annuaire de personnes) Dans mon formulaire, si j'enlève |propre que j'ai rajouté aux modèles de forms les emails apparaissent en clair.

Je viens de committer quelques tests réussis qu'on peut voir ici :
  ecrire/?exec=test_couteau_suisse
J'ai pu voir que le texte donné à post_typo protégeait les raccourcis SPIP, donc impossible d'agir un antispam à ce niveau. Seuls les raccourcis HTML étaient traitables.

Paolo avait bataillé me semble-t-il pour éviter de confondre les emails avec autre chose. C'est peut-être plus compliqué avec typo... J'en sais rien, ça c'est au delà de mes compétences.
moi je ne sais pas coder. Tout ce que je sais faire c'est tester...

Bonne soirée,
jacques