faux champ «de» dans un e-mail

9

Comment puis-je manipuler le champ "de" dans un e-mail et faire en sorte que l'utilisateur "à" voit quelque chose de différent de l'actuel.

Exemple:

vraiment de

From: [email protected]

mais ils voient

From: Tremayne "Top Dog" Stamper

J'ai entendu parler de la manipulation de SMTP, mais je ne sais vraiment pas à quel point cela est précis ou comment cela peut être fait

TStamper
la source
2
Je vois cela comme un problème valide. Nous le faisons tout le temps (en particulier, nous faisons ressembler un e-mail à partir d'un logiciel à un utilisateur).
C. Ross
Je suis d'accord que cela peut être un problème valide si vous souhaitez modifier le champ De pour afficher quelque chose comme un vrai nom au lieu d'une adresse. Nous le faisons aussi tout le temps dans nos systèmes. C'est juste un petit drapeau à cause de l'exemple de la question, passant d'une adresse à une autre. Appât anti-spam.
squillman
mis à jour avec un meilleur exemple
TStamper
C'est pourquoi ils ont créé des enregistrements SPF
Elijah Glover

Réponses:

14

À sa base, SMTP est juste un protocole basé sur du texte sans véritable vérification. Voici un exemple:

=== Trying g3.example.net:25...
=== Connected to g3.example.net.
<-  220 home.example.net ESMTP Exim 4.68 Thu, 07 May 2009 11:03:21 -0400
 -> EHLO g3.example.net
<-  250-home.example.net Hello g3.example.net [192.168.0.4]
<-  250-SIZE 52428800
<-  250-PIPELINING
<-  250-AUTH CRAM-SHA1 CRAM-MD5 MSN
<-  250-STARTTLS
<-  250 HELP
 -> MAIL FROM:<[email protected]>
<-  250 OK
 -> RCPT TO:<[email protected]>
<-  250 Accepted
 -> DATA
<-  354 Enter message, ending with "." on a line by itself
 -> Date: Thu, 07 May 2009 11:03:21 -0400
 -> To: [email protected]
 -> From: [email protected]
 -> Subject: test Thu, 07 May 2009 11:03:21 -0400
 -> X-Mailer: swaks v20070921.0-dev jetmore.org/john/code/#swaks
 -> 
 -> This is a test mailing
 -> 
 -> .
<-  250 OK id=KJA4HL-0006M6-8T
 -> QUIT
<-  221 home.example.net closing connection
=== Connection closed with remote host.

La ligne "MAIL FROM:" définit l'expéditeur d'enveloppe SMTP et le From: est défini dans le message DATA. Il existe des moyens de se protéger contre cela, mais ils sont définis dans la logique du serveur de messagerie, pas dans le protocole lui-même.

Par exemple, en tant que fournisseur de messagerie, je peux exiger qu'un utilisateur s'authentifie à l'aide d'un nom d'utilisateur de type utilisateur @ domaine. Ensuite, mon serveur de messagerie peut exiger que tout courrier qu'il envoie ait un expéditeur d'enveloppe et un en-tête From: correspondant à l'utilisateur sous lequel il s'est authentifié. Des technologies supplémentaires comme DKIM et SPF peuvent également aider dans ce domaine.

jj33
la source
8

Il y a deux ou trois choses différentes à considérer ici. Si vous souhaitez simplement afficher un nom ou une adresse e-mail différent, définissez l'en-tête "De" du message (le message provenant de l'adresse) sur l'adresse e-mail avec le nom complet entre parenthèses en tant que tel:

De: Joe Example <[email protected]>

N'oubliez pas que la ligne "de" dans l'en-tête du message est uniquement utilisée à des fins d'affichage. Le routage proprement dit est effectué par l'adresse d'enveloppe SMTP. C'est ce que les serveurs SMTP utilisent réellement pour transmettre le message entre les serveurs. Cela peut être différent de l'en-tête du message "from". Si vous avez un moteur SMTP personnalisé, faites-le simplement utiliser une adresse dans l'enveloppe SMTP et une autre dans l'en-tête "from" du message réel.

Il y a un certain nombre de raisons légitimes pour lesquelles vous voudrez peut-être le faire, mais veuillez vous abstenir de buts néfastes.

Notez qu'un exemple de syntaxe correct peut être trouvé dans RFC 5322 - A.2.1

Justin Scott
la source
1
L'exemple du support est faux, c'est à l'envers
jj33
Fixé; ça fait un moment que je n'ai pas implémenté ce genre de chose.
Justin Scott
Je l'ai mis à jour à nouveau maintenant pour correspondre à la RFC 822
Mike Graf
1
@MikeGraf 822 a été remplacé au moins deux fois, 5322 est meilleur.
Patrick Mevzek
2
telnet some_smtp_server.com 25
ehlo whatsup
mail from: [email protected]
rcpt to: [email protected]
data
your message here
end with a dot on a single line like this:
.

Bien sûr, vous aurez besoin d'un serveur SMTP qui permet le relais, ce qui est presque impossible à trouver ... ou lancez le vôtre (n'utilisez pas cette connaissance pour spammer!).

Ivan
la source
2

L'adresse "vraiment de" provient de la boîte de dialogue "de:" dans la conversation SMTP.

Le «faux» provient de l'exploitation de la pratique courante des clients de messagerie pour afficher les différents champs d'en-tête, comme indiqué dans la partie Données de la conversation SMTP. Par exemple:

# telnet mail.example.com 25
Connected to mail.example.com.
Escape character is '^]'.
220 mail.example.com ESMTP Postfix
helo fakeserver
250 mail.example.com
mail from: [email protected]
250 2.1.0 OK
rcpt to: [email protected]
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
from: [email protected]
to: [email protected]
subject: This is a subject
This is the body.
.
250 2.0.0 Ok: queued as 90D0F95A06
quit
221 2.0.0 Bye
Connection closed by foreign host.
#

Si vous aviez omis les lignes "de:" et "à:" dans la partie Données, il aurait affiché l'expéditeur et le destinataire de l'enveloppe réelle.

Notez que ces types de trucs sont souvent recherchés par les filtres anti-spam et ne feront certainement pas de vous des amis permanents. De plus, cela ne fonctionne pas sur tous les clients de messagerie (juste les plus courants).

sh-beta
la source
1

Oui, c'est en définissant manuellement les en-têtes SMTP et c'est facile à accomplir. Recherche le sur Google. Mais ne vous faites pas prendre par du spam ......

squillman
la source
0

C'est mon 2c tout droit sorti du code - écrit en C #

    public static void SendSpam(string message, string to)
    {
        System.Net.Mail.MailMessage myMessage = new System.Net.Mail.MailMessage("Fake Name", to);
        myMessage.Subject = "SPAM";
        myMessage.Body = message;
        System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient("mail.mailserver.com", 25);
        System.Net.NetworkCredential c = new System.Net.NetworkCredential("[email protected]", "realpassword");
        client.Credentials = c;
        client.Send(myMessage);
    }
Dani
la source