PDA

View Full Version : [C] Come interpretare il campo Date:


Manugal
29-04-2010, 13:29
Ciao a tutti!

Sto scrivendo un mail server e sto seguendo la specifica RFC822 per la formattazione dei messaggi email. Vorrei capire come dovrei interpretare il campo Date; ad esempio se in una mail io scrivo "Date: pincopallino", il mail server deve scartare il campo inserito dall'utente e riempire il campo Date: con la data effettiva oppure qualunque cosa scriva l'utente va bene?

Teo@Unix
29-04-2010, 21:32
puoi verificare con telnet.
il campo date è opzionale, quindi credo che nella maggior parte dei casi venga accettato.

cmq dato che non ti sapevo rispondere con sicurezza ho provato...

Ho provato su un server Postfix con ESMTP, lo accetta qualsiasi cosa metto. E spedisce a prescindere, quindi non credo faccia un controllo sul formato, ma si limita a controllare se è presente.
Se non lo è lo inserisce lui nel formato: Date: Thu, 29 Apr 2010 22:24:09 +0200 (CEST)

Unico appunto è che il messaggio spedito con "date: [parola a caso]" o senza mettere date mi è finito nella posta indesiderata di outlook... questo non c'entra con il server.... ma mi fa pensare come fare un server che faccia controlli maggiori sulle mail che invia...

Prova ad indagare semmai, ma io credo che di prassi vengano accettati.

Manugal
30-04-2010, 12:43
Grazie. Anch'io ho fatto delle prove sul server SMTP di Virgilio.it e nel mio caso il server accettava solamente i campi Date: con la data nel formato corretto; se scrivevo qualsiasi altra cosa lo scartava. Quindi alla fine credo che sia più una scelta del programmatore che implementa il server che non una specifica rigorosa della RFC.

Teo@Unix
30-04-2010, 15:35
credo che sia più una scelta del programmatore che implementa il server che non una specifica rigorosa della RFC.

si, penso di si.
cmq io imporrei rigidi controlli per lo meno sulla lunghezza del campo... vedi il caso sendmail ....

Manugal
18-05-2010, 11:44
Ciao rieccomi di nuovo. :)

Dopo aver fatto varie prove con un mail server reale (quello di Virgilio.it), mi sono accorto che anche i campi From: e To: (come anche altri campi), qualsiasi cosa io gli scriva li prende così come sono. Mi potete confermare questo fatto?

Se così fosse a che cosa serve fare il parsing dell'header se tanto qualsiasi cosa io gli scriva lui la accetta?

Teo@Unix
18-05-2010, 13:44
si, penso di si.
cmq io imporrei rigidi controlli per lo meno sulla lunghezza del campo... vedi il caso sendmail ....

ribadisco. Tutti i campi possono essere arbitrari.
Certo il server non sarà poi mai in grado di inviare ad un indirizzo che non esiste.
Questi controlli li puoi comunque inserire a mio avviso. Anche se mai nussun client commetterà mai errori di formato.

Al massimo solo chi invia attraverso una connessione telnet può sbagliare...

Più che altro, severi controlli li farei su POP3,
io posso inviare mail passandomi per un altro, a meno che il server POP3 non preveda il controllo del mittente attraverso una risoluzione DNS. Ma questo non c'entra con il tuo problema di ora...:D

L'unico controllo che mi sento di consigliarti è quello sulla lunghezza massima del campo (e non utilizzando il carattere \0 o \n per il controllo)

Manugal
18-05-2010, 15:29
Ho capito, grazie.

Ma per quanto riguarda la lunghezza massima del campo non c'è una lunghezza massima (stando a quanto scritto sulla RFC), ma c'è la lunghezza massima per una linea che è di 1000 caratteri (compreso il CRLF) e questo controllo già lo prevedo. Stiamo parlando della stessa cosa? :)

Teo@Unix
18-05-2010, 15:53
Ho capito, grazie.

Ma per quanto riguarda la lunghezza massima del campo non c'è una lunghezza massima (stando a quanto scritto sulla RFC), ma c'è la lunghezza massima per una linea che è di 1000 caratteri (compreso il CRLF) e questo controllo già lo prevedo. Stiamo parlando della stessa cosa? :)

Si scusa, sono stato poco chiaro.

Mi riferivo alla lunghezza delle stringhe immesse in input rispetto alle dimensioni dei vari buffer.
Un limite a 1000 caratteri mi sembra eccessivo per un campo.
esiste un indirizzo mail di 1000 caratteri ad esempio?

Un valore ragionevole potrebbe essere che so 50.... ma è anche tanto...

Anche perchè hai poi bisogno di un buffer grande tanto la massima dimensione accettabile.

Ad esempio, che codice usi per controllare l'input dell'indirizzo mittente?

Essendo poi un software che può potenzialmente girare su una interfaccia pubblica, io dedicherei parecchio codice al controllo degli input esterni.
Secondo il mio parere naturalmente.

Manugal
18-05-2010, 15:58
E' solo un progetto per l'università, ma ho fatto già parecchi controlli sugli input.

I 1000 caratteri sono un limite superiore, lo standard raccomanda un massimo di 78 caratteri credo per leggibilità. E comunque i 1000 caratteri sono di un'intera riga (quindi compreso il nome dell'eventuale campo e il suo valore).

Per quanto riguarda l'indirizzo email, come saprai già è composto in questo modo: local-part@domain; quindi controllo singolarmente che local-part e domain non superino i 64 caratteri ciascuno. In entrambi controllo inoltre che non ci siano caratteri speciali (tipo asterisco, tilde, caratteri accentati, ecc.). Questi sono essenzialmente i controlli che faccio sugli indirizzi email (sia del mittente che del destinatario).

Teo@Unix
18-05-2010, 16:14
E' solo un progetto per l'università, ma ho fatto già parecchi controlli sugli input.

Bè potrebbero apprezzare che curi attenzione verso le problematiche di sicurezza :D


I 1000 caratteri sono un limite superiore, lo standard raccomanda un massimo di 78 caratteri credo per leggibilità. E comunque i 1000 caratteri sono di un'intera riga (quindi compreso il nome dell'eventuale campo e il suo valore).

Per quanto riguarda l'indirizzo email, come saprai già è composto in questo modo: local-part@domain; quindi controllo singolarmente che local-part e domain non superino i 64 caratteri ciascuno. In entrambi controllo inoltre che non ci siano caratteri speciali (tipo asterisco, tilde, caratteri accentati, ecc.). Questi sono essenzialmente i controlli che faccio sugli indirizzi email (sia del mittente che del destinatario).

ok, l'importante è tenere conto di un possibile uso di telnet per spedire le mail. L'uso dei caratteri di ritorno a capo e newline per determinare la lunghezza delle stringhe potrebbe risultare pericoloso.

Manugal
18-05-2010, 16:16
Ok, grazie dell'aiuto. ;)

P.S.: Molto interessante il tuo blog. Già l'ho messo tra i preferiti. :D

Teo@Unix
18-05-2010, 17:40
Ok, grazie dell'aiuto. ;)

figurati.

P.S.: Molto interessante il tuo blog. Già l'ho messo tra i preferiti. :D

Grazie molte.:)