Skip to content
Extraits de code Groupes Projets
Valider e8c9063e rédigé par gilles.vincent@gmail.com's avatar gilles.vincent@gmail.com
Parcourir les fichiers

Maintenir une compatibilite ainsi que la possibilite d'avoir des mails simplifies

parent 88ed6de9
Branches
Étiquettes
Aucune requête de fusion associée trouvée
...@@ -28,7 +28,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( ...@@ -28,7 +28,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'option_email_disponible_label' => 'Adresse disponible', 'option_email_disponible_label' => 'Adresse disponible',
'option_email_disponible_label_case' => 'Vérifier que l\'adresse n\'est pas déjà utilisée par un utilisateur', 'option_email_disponible_label_case' => 'Vérifier que l\'adresse n\'est pas déjà utilisée par un utilisateur',
'option_email_mode_label' => 'Mode de vérification des courriels', 'option_email_mode_label' => 'Mode de vérification des courriels',
'option_email_mode_normal' => 'Vérification normale de SPIP (respectant la norme RFC)', 'option_email_mode_5322' => 'Vérification la plus conforme aux standards disponibles',
'option_email_mode_normal' => 'Vérification normale de SPIP',
'option_email_mode_strict' => 'Vérification moins permissive', 'option_email_mode_strict' => 'Vérification moins permissive',
'option_entier_max_label' => 'Valeur maximum', 'option_entier_max_label' => 'Valeur maximum',
'option_entier_min_label' => 'Valeur minimum', 'option_entier_min_label' => 'Valeur minimum',
......
...@@ -5,6 +5,9 @@ if (!defined("_ECRIRE_INC_VERSION")) return; ...@@ -5,6 +5,9 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
/** /**
* Vérifie la validité d'une adresse de courriel. * Vérifie la validité d'une adresse de courriel.
*
* Les contraintes du mail sont déterminées par le mode de validation
* En option, on contrôle aussi la disponibilité du mail dans la table des auteurs
* *
* @param string $valeur La valeur à vérifier. * @param string $valeur La valeur à vérifier.
* @param array $option Un éventuel tableau d'options. * @param array $option Un éventuel tableau d'options.
...@@ -20,17 +23,15 @@ function verifier_email_dist($valeur, $options=array()){ ...@@ -20,17 +23,15 @@ function verifier_email_dist($valeur, $options=array()){
} }
// Choix du mode de verification de la syntaxe des courriels // Choix du mode de verification de la syntaxe des courriels
if (!$options['mode'] or !in_array($options['mode'], array('strict'))){ if (!$options['mode'] or !in_array($options['mode'], array('normal','rfc5322','strict'))){
$mode = 'normal'; $mode = 'normal';
} }
else{ else{
$mode = $options['mode']; $mode = $options['mode'];
} }
if ($mode == 'normal') $fonctions_disponibles = array('normal' => 'email_valide', 'rfc5322' => 'verifier_email_5322', 'strict' => 'verifier_email_de_maniere_stricte');
$fonction_verif = 'email_valide'; $fonction_verif = $fonctions_disponibles[$mode];
else
$fonction_verif = 'verifier_email_de_maniere_stricte';
if (!$fonction_verif($valeur)) if (!$fonction_verif($valeur))
return _T('verifier:erreur_email', array('email' => echapper_tags($valeur))); return _T('verifier:erreur_email', array('email' => echapper_tags($valeur)));
...@@ -42,11 +43,12 @@ function verifier_email_dist($valeur, $options=array()){ ...@@ -42,11 +43,12 @@ function verifier_email_dist($valeur, $options=array()){
* Changement de la RegExp d'origine * Changement de la RegExp d'origine
* *
* Respect de la RFC5322 * Respect de la RFC5322
*
* @link (phraseur détaillé ici : http://www.dominicsayers.com/isemail/) * @link (phraseur détaillé ici : http://www.dominicsayers.com/isemail/)
* @param string $valeur La valeur à vérifier * @param string $valeur La valeur à vérifier
* @return boolean Retourne true uniquement lorsque le mail est valide * @return boolean Retourne true uniquement lorsque le mail est valide
*/ */
function verifier_email_de_maniere_stricte($valeur){ function verifier_email_rfc5322($valeur){
// Si c'est un spammeur autant arreter tout de suite // Si c'est un spammeur autant arreter tout de suite
if (preg_match(",[\n\r].*(MIME|multipart|Content-),i", $valeur)) { if (preg_match(",[\n\r].*(MIME|multipart|Content-),i", $valeur)) {
spip_log("Tentative d'injection de mail : $valeur"); spip_log("Tentative d'injection de mail : $valeur");
...@@ -61,8 +63,34 @@ function verifier_email_de_maniere_stricte($valeur){ ...@@ -61,8 +63,34 @@ function verifier_email_de_maniere_stricte($valeur){
} }
/** /**
* Vérifier que le courriel utilisé n'est pas * Version basique du contrôle des mails
* déjà présent en base SPIP_AUTEURS *
* Cette version impose des restrictions supplémentaires
* qui sont souvent utilisées pour des raison de simplification des adresses
* (ex. comptes utilisateurs lisibles, etc..)
*
* @param string $valeur La valeur à vérifier
* @return boolean Retourne true uniquement lorsque le mail est valide
*/
function verifier_email_de_maniere_stricte($valeur){
// Si c'est un spammeur autant arreter tout de suite
if (preg_match(",[\n\r].*(MIME|multipart|Content-),i", $valeur)) {
spip_log("Tentative d'injection de mail : $valeur");
return false;
}
foreach (explode(',', $valeur) as $adresse) {
// nettoyer certains formats
// "Marie Toto <Marie@toto.com>"
$adresse = trim(preg_replace(",^[^<>\"]*<([^<>\"]+)>$,i", "\\1", $v));
if (!preg_match('/^([A-Za-z0-9]){1}([A-Za-z0-9]|-|_|\.)*@[A-Za-z0-9]([A-Za-z0-9]|-|\.){1,}\.[A-Za-z]{2,4}$/', $adresse))
return false;
}
return true;
}
/**
* Vérifier que le courriel à tester n'est pas
* déjà utilisé dans la table spip_auteurs
* *
* @param string $valeur La valeur à vérifier * @param string $valeur La valeur à vérifier
* @return boolean Retourne false lorsque le mail est déjà utilisé * @return boolean Retourne false lorsque le mail est déjà utilisé
......
...@@ -10,6 +10,7 @@ options: ...@@ -10,6 +10,7 @@ options:
datas: datas:
normal: '<:verifier:option_email_mode_normal:>' normal: '<:verifier:option_email_mode_normal:>'
strict: '<:verifier:option_email_mode_strict:>' strict: '<:verifier:option_email_mode_strict:>'
rfc5322: '<:verifier:option_email_mode_rfc5322:>'
defaut: 'normal' defaut: 'normal'
- -
saisie: 'case' saisie: 'case'
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter