Yep, super.
Juste un détail :
le principe des fonctions de test est que si tous les tests sont valides, la fonction ne doit afficher que 'OK', et rien d'autre.
Il faudrait donc que toutes les explications, forts utiles, ne soient affichées qu'en cas de résultat incorrect ![]()
Dans ce cas tu peux afficher tout ce que tu veux...
Cédric
Le 21 juin 09 à 10:39, xdjuj@apsulis.com a écrit :
Author: xdjuj@apsulis.com
Date: Sun Jun 21 10:39:11 2009
New Revision: 29311Log:
Est-ce que la fonction actuelle de SPIP filtre correctement les adresses mails compte tenu d'un usage sur Internet ?Added:
_core_/tests/filtres/email_valide.phpAdded: _core_/tests/filtres/email_valide.php
--- _core_/tests/filtres/email_valide.php (added)
+++ _core_/tests/filtres/email_valide.php Sun Jun 21 10:39:11 2009
@@ -0,0 +1,168 @@
+<?php
+
+ $test = 'email_valide';
+ require '../test.inc';
+ include_spip('inc/filtres');
+?>
+
+ <p>Il existe une différence entre la définition générale (RFC 822) et l'usage réel qui est fait des adresses de courriel.</p>
+
+ <p>Les registar et hébergeurs principaux ne respectent d'ailleurs pas cette définition alors même que ce sont eux qui permettent à la majorité des gens de définir leurs adresses mails et qui bien souvent servent de serveur SMTP. (Il ne m'est pas possible actuellement de tester d'autres serveurs SMTP).</p>
+
+ <p>Selon Dreamhost :</p>
+ <ul>
+ <li>Un courriel commence par une lettre, un chiffre, un tiret, un tiret bas, un plus ou un &,</li>
+ <li>Un courriel peut contenir des caractères alphanum, des points, des tirets, des tirets bas, des plus, des &.</li>
+ </ul>
+ <p>L'adresse <em>&-_+.spip17&-_+.@domaine.com</em> est donc valide.</p>
+
+ <p>Selon OVH :</p>
+ <ul>
+ <li>Un courriel commence par une lettre, un chiffre, un tiret ou un tiret bas,</li>
+ <li>Un courriel peut contenir des caractères alphanum, des points, des tirets ou des tirets bas.</li>
+ </ul>
+ <p>L'adresse <em>&-_+.spip17&-_+.@domaine.com</em> n'est donc pas valide et même rejetée par le serveur SMTP d'OVH. L'adresse -spip17_.@domaine.com est quant à elle validée.</p>
+
+ <p>De plus, il convient de faire le distingo entre un usage que je pense classique et majoritaire de SPIP : Internet, et un usage limité à une utilisation locale. Peut être que SPIP devrait avoir 2 regexp différentes pour ces 2 usages, deux fonctions ou 1 argument supplémentaire à l'actuelle.</p>
+ <p>Une utilisation locale permet des noms de domaines variés, et sans extension.</p>
+
+ <p>Les noms de domaines publics (qui, je pense, sont majoritairement utilisés pour SPIP) quant à eux respectent des règles plus strictes :</p>
+ <ul>
+ <li>Un nom de domaine commence par une lettre ou un chiffre,</li>
+ <li>Un nom de domaine peut contenir des caractères alphanumériques, des tirets ou des points (cas des sous domaines),</li>
+ <li>Une extension de domaine <strong>public</strong> contient au moins 2 lettres, au plus 6. ( http://www.iana.org/domains/root/db/index.html )</li>
+ </ul>
+
+ <p><strong>SPIP, de part son respect à la norme RFC 822 permet donc aujourd'hui l'usage d'adresses mails qui ne sont clairement pas valides dans notre utilisation quotidienne, que je pense majoritaire, de l'outil SPIP. Il est actuellement ainsi possible de valider les adresses :</strong></p>
+ <ul>
+ <li>Jun 20 21:29:32 <cerdic>"Par exemple, l'adresse complètement farfelue: #+^-`&%_=|/|_?=!§{}$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@mail.com est, suivant la norme, une adresse parfaitement valide."</li>
+ <li>utilisateur@domaine.f</li>
+ <li>utilisateur@domaine.frfrfrfrfrfr</li>
+ <li>d@d</li>
+ </ul>
+ <p>Qui à mon sens ne devraient pas l'être.</p>
+
+ <p><em>Se pose donc peut être le cas des extensions de domaines arabes ou qui me seraient inconnus (et courants) de plus de 6 caractères, mais il me semble que les dommages collatéraux causés par l'utilisation d'une RegExp non respectueuse des standards mais beaucoup moins permissive (appliquée à un usage courant) sont moins importants que ceux de la RegExp actuelle bien trop permissive utilisée par SPIP. Je descendrais même personnellement à 4 pour l'extension, tant pis pour .travel et .museum... °_°</em></p>
+
+ <!-- /* Fonction d'origine de SPIP */ -->
+ <h1>Fonction email_valide() de SPIP</h1>
+
+ <p>Ces mails sont valides, et bien reconnus.</p>
+
+ <?php
+ $emails_valides = array(
+ 'utilisateur@domaine.com',
+ 'uti-lisa.teur@domai-ne.fr',
+ '&-_+.spip17&-_+.@domaine.com'
+ );
+ echo '<ul>';
+ foreach($emails_valides as $tests => $email)
+ echo '<li>'.$email.' -> passés par email_valide() -> '.email_valide($email).'</li>';
+ echo '</ul>';
+ ?>
+
+ <!-- // Emails qui ne devraient pas être valides -->
+ <p><strong>Ce mail est valide selon la RFC822 (mais à mon sens ne devrait pas l'être), et rejeté par SPIP</strong></p>
+ <?php
+ $emails_non_valides_mais_valides = array(
+ '#+^-`&%_=|/|_?=!§{}$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@mail.com'
+ );
+ echo '<ul style="font-weight:bold;">';
+ foreach($emails_non_valides_mais_valides as $tests => $email)
+ echo '<li>'.$email.' -> passés par email_valide() -> '.email_valide($email).'</li>';
+ echo '</ul>';
+ ?>
+
+
+ <!-- // Emails qui ne devraient pas être valides -->
+ <p><strong>Ces mails sont valides, mais à mon sens devraient être rejetés dans un usage classique :</strong></p>
+ <?php
+ $emails_non_valides_mais_valides = array(
+ 'utilisateur@domaine.f',
+ 'utilisateur@domaine.frfrfrfrfrfr',
+ 'd@d'
+ );
+ echo '<ul style="font-weight:bold;">';
+ foreach($emails_non_valides_mais_valides as $tests => $email)
+ echo '<li>'.$email.' -> passés par email_valide() -> '.email_valide($email).'</li>';
+ echo '</ul>';
+ ?>
+
+ <!-- // Emails effectivement rejetés -->
+ <p>Ces mails sont non valides, et filtrés correctement.</p>
+ <?php
+ $emails_non_valides_rejetes = array(
+ 'utilisateurdomaine.f',
+ 'utilis/@domaine',
+ 'utilisateur@',
+ '@domaine.fr'
+ );
+ echo '<ul>';
+ foreach($emails_non_valides_rejetes as $tests => $email)
+ echo '<li>'.$email.' -> passés par email_valide() -> '.email_valide($email).'</li>';
+ echo '</ul>';
+ ?>
+
+ <!-- /* Suggestion d'expression régulière */ -->
+ <h1>Suggestion d'amélioration</h1>
+
+ <p>Expression régulière proposée (respectant Dreamhost, plus permissif que OVH et excluant les extensions de domaine de plus de 4 caractères) :</p>
+ <p><strong>^([A-Za-z0-9]|&|+|_|-]){1}([A-Za-z0-9]|&|+|_|-|\.)*@[A-Za-z0-9]([A-Za-z0-9]|-|\.){2,}\.[A-Za-z]{2,4}$</strong></p>
+
+ <?php
+ function email_public_valide($adresses) {
+ // Si c'est un spammeur autant arreter tout de suite
+ if (preg_match(",[\n\r].*(MIME|multipart|Content-),i", $adresses)) {
+ spip_log("Tentative d'injection de mail : $adresses");
+ return false;
+ }
+
+ foreach (explode(',', $adresses) as $v) {
+ // nettoyer certains formats
+ // "Marie Toto <Marie@toto.com>"
+ $adresse = trim(preg_replace(",^[^<>\"]*<([^<>\"]+)>$,i", "\\1", $v));
+ // RFC 822 non respectée
+ if (!preg_match('/^([A-Za-z0-9]|\+|&|_|-|]){1}([A-Za-z0-9]|\+|&|_|-|\.)*@[A-Za-z0-9]([A-Za-z0-9]|-|\.){2,}\.[A-Za-z]{2,4}$/', $adresse))
+ return false;
+ }
+ return $adresse;
+ }
+ ?>
+
+ <p>Ces mails sont valides, et bien reconnus.</p>
+
+ <?php
+ $emails_valides = array(
+ 'utilisateur@domaine.com',
+ 'uti-lisa.teur@domai-ne.fr',
+ '&-_+.spip17&-_+.@domaine.com',
+ '-@domaine.fr',
+ );
+ echo '<ul>';
+ foreach($emails_valides as $tests => $email)
+ echo '<li>'.$email.' -> passés par email_public_valide() -> '.email_public_valide($email).'</li>';
+ echo '</ul>';
+ ?>
+
+ <!-- // Emails effectivement rejetés -->
+ <p>Ces mails sont non valides, et filtrés correctement.</p>
+ <?php
+ $emails_non_valides_rejetes = array(
+ '#+^-`&%_=|/|_?=!§{}$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@mail.com',
+ 'utilisateur@domaine.frfrfrfrfrfr',
+ 'd@d',
+ 'utilisateurdomaine.f',
+ 'utilis/@domaine',
+ 'utilisateur@',
+ '@domaine.fr'
+ );
+ echo '<ul>';
+ foreach($emails_non_valides_rejetes as $tests => $email)
+ echo '<li>'.$email.' -> passés par email_public_valide() -> '.email_public_valide($email).'</li>';
+ echo '</ul>';
+ ?>
+
\ No newline at end of file_______________________________________________
Spip-zone-commit@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone-commit