Allowlist dei link e blocco del contenuto
La tua chiave pubblica è visibile nel codice del tuo sito, quindi chiunque può copiarla e chiamare direttamente l’API. Per un modulo di contatto va benissimo: l’email arriva sempre a te. Le cose cambiano quando un modello prende il destinatario dai parametri (una conferma di iscrizione alla newsletter, una risposta automatica, una conferma d’ordine): chi possiede la chiave pubblica potrebbe inviare il tuo modello – dal tuo dominio, con il tuo marchio – a qualsiasi indirizzo, compilandone testo e link. È così che funziona il phishing.
La regola di Frontmail è quindi: destinatario dinamico ⇒ contenuto bloccato. Puoi comunque inviare a un destinatario scelto nel browser, ma chi chiama l’API non può trasformare il tuo modello in un’email di phishing.
Quando il contenuto è bloccato
Sezione intitolata “Quando il contenuto è bloccato”| Richiesta | Bloccato |
|---|---|
| chiave pubblica + modello i cui A/CC/CCN usano parametri (Consenti destinatario dinamico attivo) | sì |
| risposta automatica (va sempre all’indirizzo del modulo) | sì – link e campi del mittente |
| chiave privata (il tuo server) | no, a meno che il modello non abbia Consenti solo link a domini consentiti |
| chiave pubblica + modello con destinatario fisso (modulo di contatto) | no – si applica solo la regola del mittente |
Un modello con Consenti destinatario dinamico attivo ma con indirizzi fissi in A/CC/CCN non è bloccato.
Cosa deve rispettare una richiesta bloccata
Sezione intitolata “Cosa deve rispettare una richiesta bloccata”- Il CAPTCHA è obbligatorio. Il modello deve avere Richiedi CAPTCHA attivo, altrimenti la
richiesta fallisce con
403 dynamic_recipient_requires_captcha. Il CAPTCHA usa le tue chiavi Turnstile. Se non puoi usare il CAPTCHA, invia il modello dal tuo server con una chiave privata. - Mittente fisso. Indirizzo del mittente, nome del mittente e Reply-To non devono usare
parametri –
403 dynamic_field_not_allowed. - Nessun markup dal chiamante, testi brevi. I parametri di tipo HTML non possono essere
compilati e ogni valore di testo può avere al massimo 500 caratteri (parametri URL 2.048;
una Lunghezza max. inferiore impostata sul parametro resta valida) –
422 invalid_template_paramscondetails.reason: "content_locked". - Link solo verso domini consentiti – vedi sotto –
403 link_not_allowed. - Limite per destinatario. Al massimo 5 email per indirizzo destinatario al giorno (UTC),
configurabile in Sicurezza → Email per destinatario al giorno (1–1.000). Oltre il limite:
429 rate_limitedcondetails.scope: "recipient". Le risposte automatiche condividono il contatore: oltre il limite non viene creata alcuna risposta automatica.
Ogni controllo avviene prima che venga consumato un credito. Per le risposte automatiche, un
controllo non superato segna la risposta automatica come failed (con il codice di errore nella
cronologia), il credito viene rimborsato e non viene inviato nulla.
Domini consentiti per i link
Sezione intitolata “Domini consentiti per i link”Un link è consentito quando il suo dominio:
- è scritto direttamente nel modello (HTML, versione testuale o oggetto) – non generato da un
segnaposto.
https://acme.com/reset?token={{token}}consenteacme.com;{{reset_url}}ohttps://{{sub}}.acme.comnon consentono nulla; - è nella lista dei domini consentiti (Sicurezza → Siti consentiti);
- è in Sicurezza → Domini consentiti per i link – uno per riga,
example.com(esattamente quell’host) o*.example.com(sottodomini, non il dominio principale) – con le stesse regole dei domini consentiti; - è il dominio di Frontmail (il piè di pagina Inviato con Frontmail del piano Free).
mailto:, tel: e qualsiasi altro link non web (javascript:, data:, …) sono consentiti solo
quando lo stesso identico link è scritto nel modello.
Cosa viene controllato
Sezione intitolata “Cosa viene controllato”Dopo il rendering, Frontmail raccoglie ogni URL che un client di posta potrebbe aprire o trasformare in un link:
href,src,srcset,action,formaction,background,postere gli altri attributi URL, anche dentro i commenti condizionali di Outlook;url()e@importCSS negli attributistylee in<style>, e<meta http-equiv="refresh">;- URL e domini senza schema nel testo HTML, nella versione testuale e nell’oggetto – i client di
posta trasformano in link
evil.com/loginowww.evil.com, quindi anche questi contano come link.
Prima del confronto, gli URL vengono normalizzati come li leggerebbe un browser: le entità HTML e
gli escape CSS vengono decodificati, i caratteri invisibili rimossi, \ trattato come /, //host
senza protocollo risolto, le informazioni utente eliminate (https://acme.com@evil.com è
evil.com), la codifica percentuale decodificata, maiuscole e punti finali rimossi, e i domini
internazionalizzati confrontati in punycode – un sosia come аcme.com con una а cirillica non
corrisponde a acme.com (l’errore lo segnala con idn: true).
L’errore elenca in details.hosts solo i domini incriminati – mai gli URL completi, che
potrebbero contenere token.
- I domini senza schema vengono rilevati con una lista di terminazioni note che non sono domini
(
report.pdf,index.htmleNode.jsnon sono link), quindi un testo comeMr.Smithpuò essere considerato il dominiomr.smith. Le terminazioni preferite dal phishing che sono anche domini reali (.zip,.mov) contano sempre. - I semplici indirizzi email nel testo (
giulia@example.com) non vengono trattati come link. - Il controllo riguarda dove portano i link, non il testo che li circonda. Per i moduli pubblici mantieni i testi brevi e il limite per destinatario basso.
Controllo dei link in altri modelli
Sezione intitolata “Controllo dei link in altri modelli”Attiva Consenti solo link a domini consentiti nelle impostazioni del modello (Impostazioni → Protezione) per applicare il controllo dei link a ogni richiesta, inclusi gli invii con chiave privata. È attivo per impostazione predefinita nei modelli della galleria con destinatario dinamico.
Indirizzo del mittente
Sezione intitolata “Indirizzo del mittente”Per ogni richiesta con chiave pubblica, l’indirizzo del mittente del modello non deve provenire
dai parametri (altrimenti 403 dynamic_field_not_allowed).
Un modulo di contatto che inserisce l’indirizzo del visitatore in Reply-To continua a
funzionare – è il posto giusto per quell’indirizzo. L’editor dei modelli ti avvisa di tutto questo
in Controlli.