diff --git a/aliasdeny.txt b/aliasdeny.txt new file mode 100644 index 0000000..e3cb516 --- /dev/null +++ b/aliasdeny.txt @@ -0,0 +1,22 @@ +/^root$/ +/^mail$/ +/^email$/ +/^test$/ +/^toto$/ +/^www-data$/ +/^www-owne$/ +/^manager$/ +/^admin$/ +/postmaster/ +/^MAILER-DAEMON$/ +/^abuse$/ +/^spam$/ +/^backup$/ +/^list$/ +/^nobody$/ +/^vmail$/ +/^mysql$/ +/^web$/ +/^git$/ +/^mail$/ +/^[1-9]+$/ diff --git a/blacklist.txt b/blacklist.txt new file mode 100644 index 0000000..2221216 --- /dev/null +++ b/blacklist.txt @@ -0,0 +1,4 @@ +/^exemple@exemple.com$/ +/.pl$/ +/^exemple[1-9]+@toto.fr$/ + diff --git a/conf.php b/conf.php index 567d374..fca7bc5 100755 --- a/conf.php +++ b/conf.php @@ -1,63 +1,52 @@ '); -# Alisas interdit : -$aliasInterditListe = array('root', 'mail', 'email', 'test', 'toto', 'www-data', 'www-owne', 'manager', 'admin', 'postmaster', 'MAILER-DAEMON', 'abuse', 'spam', 'backup', 'list', 'nobody', 'vmail', 'mysql', 'web', 'git'); +// Alisas interdit : (regex ligne par ligne) - commenter pour désactiver +define('ALIASDENY', './emailPoubelle/aliasdeny.txt'); + +// Blackliste d'email : (regex ligne par ligne) - commenter pour désactiver +define('BLACKLIST', './emailPoubelle/blacklist.txt'); ?> diff --git a/emailPoubelle.php b/emailPoubelle.php index db7a88a..5d4e9ee 100644 --- a/emailPoubelle.php +++ b/emailPoubelle.php @@ -5,16 +5,22 @@ // Licence : GNU GPL v3 : http://www.gnu.org/licenses/gpl.html // Créateur : David Mercereau - david [.] mercereau [aro] zici [.] fr // Home : http://poubelle.zici.fr -// Date : 08/2012 -// Version : 0.2 +// Date : 08/2013 +// Version : 0.3 // Dépendance : Postifx //----------------------------------------------------------- include_once('./conf.php'); -# Init +# Init & vérif if (!is_writable(FICHIERALIAS)) { - exit('
Erreur : le fichier d\'alias ('.FICHIERALIAS.') ne peut pas être écrit. Merci de contacter l\'administrateur
'); + exit('
Erreur : le fichier d\'alias ne peut pas être écrit. Merci de contacter l\'administrateur
'); +} +if (defined('BLACKLIST') && !is_readable(BLACKLIST)) { + exit('
Erreur : un fichier de blacklist est renseigné mais n\'est pas lisible. Merci de contacter l\'administrateur
'); +} +if (defined('ALIASDENY') && !is_readable(ALIASDENY)) { + exit('
Erreur : un fichier d\'alias interdit est renseigné mais n\'est pas lisible. Merci de contacter l\'administrateur
'); } function VerifMXemail($email) { @@ -49,8 +55,57 @@ function SupprimerAlias($alias,$email) { UpdateVirtualDB(); } +function parseFileRegex($file, $chaine) { + $return=false; + $handle = fopen($file, 'r'); + while (!feof($handle)) { + $buffer = fgets($handle); + $buffer = str_replace("\n", "", $buffer); + if ($buffer) { + if (!preg_match('/^(#|$|;)/', $buffer) && preg_match($buffer, $chaine)) { + $return=true; + break; + } + } + } + fclose($handle); + return $return; +} + +function BlacklistEmail($email) { + if (defined('BLACKLIST')) { + return parseFileRegex(BLACKLIST, $email); + } else { + return false; + } +} + +function AliasDeny($alias) { + if (defined('ALIASDENY')) { + return parseFileRegex(ALIASDENY, $alias); + } else { + return false; + } +} + +function ListeAlias($email) { + $handle = fopen(FICHIERALIAS, 'r'); + while (!feof($handle)) { + $buffer = fgets($handle); + if ($buffer) { + $bufferExplode = explode(' ', $buffer); + if (!preg_match('/^(#|$|;)/', $buffer) && preg_match('/^'.$email.'$/', $bufferExplode[1])) { + $alias[]=$bufferExplode[0]; + } + } + } + fclose($handle); + return ($alias); +} + if (DEBUG) { echo '
Debug activé
'; + print_r($_REQUEST); } echo '

Emails poubelle libre

@@ -59,8 +114,8 @@ echo '

Emails poubelle libre

if (isset($_REQUEST['Validemail'])) { if (preg_match('/#'.$_REQUEST['Validemail'].' [a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+ [a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+/', file_get_contents(FICHIERALIAS),$res)) { $data=explode(' ', $res[0]); - $aliasZici=explode('@', $data[1]); - $alias=$aliasZici[0]; + $aliasExplode=explode('@', $data[1]); + $alias=$aliasExplode[0]; $email=$data[2]; SupprimerAlias($alias,$email); AjouterAlias($alias,$email); @@ -68,7 +123,33 @@ if (isset($_REQUEST['Validemail'])) { } else { echo '
Erreur : ID introuvable
'; } -} else if (isset($_REQUEST['email']) && isset($_REQUEST['alias'])) { +} elseif (isset($_REQUEST['list'])) { + $email=strtolower($_REQUEST['email']); + if (! filter_var($email, FILTER_VALIDATE_EMAIL)) { + echo '
Erreur : Adresse email incorrect
'; + } else if (! VerifMXemail($email)) { + echo '
Erreur : Adresse email incorrect (2)
'; + } else if (!preg_match('#\n[a-z0-9]+@'.DOMAIN.' '.$email.'#', file_get_contents(FICHIERALIAS))) { + echo '
Vous n\'avez encore aucun alias d\'actif
'; + } else { + # Envoi de l'email récapitulatif : + if (!preg_match('#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#', $email)) { + $passage_ligne = "\r\n"; + } else { + $passage_ligne = "\n"; + } + $header = 'From: '.EMAIL_FROM.$passage_ligne; + $header.= 'MIME-Version: 1.0'.$passage_ligne; + $message= 'Liste de vos redirections poubelles : '.$passage_ligne; + foreach (ListeAlias($email) as $alias) { + $message.=' * '.$alias.$passage_ligne; + } + $message.= 'Pour supprimer un email poubelle vous pouvez vous rendre sur le lien ci-dessou : '.$passage_ligne; + $message.= "\t * ".URLPAGE.$passage_ligne; + mail($email,EMAIL_SUJET_LISTE,$message,$header); + echo '
Un email vous a été adressé avec la liste de vos emails poubelles actifs.
'; + } +} elseif (isset($_REQUEST['email']) && isset($_REQUEST['alias'])) { $alias=strtolower($_REQUEST['alias']); $email=strtolower($_REQUEST['email']); if (! filter_var($email, FILTER_VALIDATE_EMAIL)) { @@ -77,10 +158,12 @@ if (isset($_REQUEST['Validemail'])) { echo '
Erreur : Adresse email incorrect (2)
'; } else if (! preg_match('#^[\w.-]+$#',$alias)) { echo '
Erreur : email poubelle incorrect
'; - } else if (in_array($alias, $aliasInterditListe)) { + } else if (AliasDeny($alias)) { echo '
Erreur : email poubelle interdit
'; + } else if (BlacklistEmail($email)) { + echo '
Erreur : vous avez été blacklisté sur ce service
'; } elseif (isset($_REQUEST['ajo'])) { - if (preg_match('#\n'.$alias.'@'.DOMAIN.'#', file_get_contents(FICHIERALIAS)) || preg_match('#\n\#[0-9]+ '.$alias.'@'.DOMAIN.'#', file_get_contents(FICHIERALIAS))) { + if (preg_match('#\n'.$alias.'@'.DOMAIN.'#', file_get_contents(FICHIERALIAS)) || preg_match('#\n\#[0-9]+ '.$alias.'@'.DOMAIN.'#', file_get_contents(FICHIERALIAS))) { echo '
Erreur : cet email poubelle est déjà utilisé
'; } else { if (preg_match('#\n[a-z0-9]+@'.DOMAIN.' '.$email.'#', file_get_contents(FICHIERALIAS))) { @@ -112,7 +195,7 @@ if (isset($_REQUEST['Validemail'])) { } else { $message.= "\t * ".URLPAGE.'?sup=true&email='.$email.'&alias='.$alias.$passage_ligne; } - mail($email,EMAIL_SUJET.$alias,$message,$header); + mail($email,EMAIL_SUJET_CONFIRME.$alias,$message,$header); echo '
Votre email ('.$email.') nous étant inconnu, une confirmation vous a été envoyé par email.
'; } } @@ -131,9 +214,9 @@ if (isset($_REQUEST['Validemail'])) { @
- +
- ou + ou la redirection poubelle

Version - Créé par David Mercereau sous licence GNU GPL v3