Funzionalità — raccolta

Una protezione antispam che non dovete mai superare.

NumoForms filtra gli invii spazzatura con tre livelli applicati da un trigger di database anziché dal modulo: un campo honeypot fuori schermo, una soglia minima di tempo di permanenza di 3 secondi per impostazione predefinita e configurabile per singolo questionario, e un limite di frequenza di 30 risposte al minuto per questionario. Non c’è deliberatamente alcun reCAPTCHA. Una risposta segnalata dai controlli non viene scartata: alla persona si spiega che cosa è successo e può confermarla.

Il controllo risiede nel database, non nella pagina

In NumoForms le risposte vengono inserite direttamente dal browser nel database. Ne consegue che qualsiasi regola scritta soltanto nell’interfaccia ha valore di consiglio. Uno script che invia direttamente all’API non esegue mai il vostro JavaScript, quindi non vede mai il controllo.

Perciò i tre controlli vengono eseguiti in un trigger di database. Ogni inserimento vi passa attraverso, che provenga dalla pagina ospitata del questionario, da un questionario incorporato in un altro sito o da uno script scritto da qualcuno alle tre di notte. È lo stesso ragionamento che sta dietro alle date di chiusura e ai tetti massimi di risposte, anch’essi applicati a livello di database e non nascondendo un pulsante.

Dove vengono eseguiti i controlli conta più di quanto siano astuti. Due dei tre segnali — il valore dell’honeypot e il tempo trascorso — sono inviati dal browser, quindi uno script su misura può lasciare vuoto il campo nascosto e non inviare alcun dato temporale. Il limite di frequenza non richiede nulla dal client, ed è per questo che è il livello che regge ancora quando gli altri due vengono eliminati.

I tre livelli

1. Honeypot

Un campo collocato fuori schermo che una persona intenta a compilare il questionario non vede mai e non seleziona mai. I compilatori automatici tendono a riempire ogni campo che trovano. Tutto ciò che arriva con quel campo valorizzato non è stato compilato da una persona che stava leggendo la pagina.

2. Tempo di permanenza

Una soglia minima, in secondi, sulla durata di una risposta. Il valore predefinito è 3 e si imposta per singolo questionario, così una consultazione da 40 domande può pretendere più di un modulo di feedback da due. Un dato temporale mancante non è trattato come spam, quindi i client più vecchi e le risposte riprese da un link di salva e riprendi continuano a funzionare.

3. Limite di frequenza

Risposte al minuto per singolo questionario, preimpostate a 30. Questo non richiede assolutamente nulla dal client, ed è proprio il punto: regge anche contro un bot che elimini ogni metadato su cui si basano gli altri due livelli.

Perché non c’è reCAPTCHA

È la decisione che più facilmente emerge in fase di gara, quindi ecco l’argomento per intero.

Rende Google un sub-responsabile della vostra consultazione

Mettere reCAPTCHA su un modulo di consultazione pubblica significa che ogni cittadino che lo apre invia dati a Google prima ancora di rispondere a una domanda. Qualcuno nella vostra organizzazione dovrà poi registrare quel trasferimento, giustificarlo e difenderlo in un’informativa sulla privacy, per un modulo che esiste per raccogliere opinioni sulla raccolta dei rifiuti. NumoForms tiene i contenuti dei questionari e le risposte nella regione londinese di Supabase, e la pagina su GDPR e protezione dei dati spiega che cosa questo significhi in pratica. Aggiungere un’azienda pubblicitaria alla catena del trattamento per intercettare una manciata di righe spazzatura è un pessimo scambio per un ente locale che conduce consultazioni pubbliche.

Penalizza chi ha una disabilità

Le prove basate su immagini e audio sono una causa ampiamente documentata di invii falliti per le persone con disabilità. La nostra pagina sull’accessibilità argomenta contro esattamente quel modello. Distribuire un CAPTCHA contraddirebbe una posizione che pubblichiamo, e un questionario che chi usa uno screen reader non riesce a portare a termine non è un questionario con una buona protezione antispam. È un questionario con un campione distorto.

I tre controlli che NumoForms esegue sono invisibili. A nessuno viene chiesto di dimostrare qualcosa, di riconoscere un autobus o di trascrivere un audio distorto. Non c’è alcuna prova da fallire.

Il rifiuto non è mai definitivo

Ognuna di queste euristiche ha un caso di falso positivo reale, e fingere il contrario è il modo migliore per perdere dati veri.

A un questionario di due domande si risponde davvero in un paio di secondi. Una sala con trenta persone a un incontro di consultazione, a cui il link è stato dato tutto insieme, produce davvero trenta invii nello stesso minuto. Dal punto di vista del database, entrambi i casi hanno esattamente l’aspetto di un attacco.

Perciò una risposta segnalata non finisce in silenzio nel cestino. Alla persona viene mostrato che cosa è successo, mantiene le proprie risposte e può inviarle di nuovo: il secondo tentativo lascia cadere il segnale temporale, perché una persona ne ha appena dato garanzia. L’honeypot e il limite di frequenza restano in vigore, quindi a un’ondata autentica viene chiesto di riprovare fra un istante anziché farla passare senza controlli. Il filtro diventa così un attrito per uno script e un singolo tocco in più per una persona. Perdere una risposta vera a una consultazione è peggio che accettarne una spazzatura, e una spazzatura si riconosce poi facilmente nei vostri risultati e nell’analisi degli abbandoni.

Che cosa questo non fa

Detto chiaramente, perché prima o poi lo scoprireste.

  • Nessun Cloudflare Turnstile. È la prova rispettosa della privacy più spesso suggerita come alternativa a reCAPTCHA, e oggi non è integrata.
  • Nessun blocco basato sull’IP. Qui nulla blocca o limita per indirizzo, quindi chi attacca con determinazione, distribuendo gli invii su molte sorgenti e mantenendone il ritmo sotto la soglia, non viene fermato da questi tre livelli.
  • Due dei tre segnali arrivano dal browser. Il valore dell’honeypot e il tempo trascorso sono forniti dal client, quindi uno script scritto apposta per il vostro questionario può rifiutarsi di inviarli. Fermano i compilatori automatici di serie, non un attaccante mirato; il limite di frequenza è il livello che non dipende dalla cooperazione altrui.
  • Nessun filtro sui contenuti. I controlli guardano come è arrivata una risposta, non che cosa dice. Il testo libero offensivo è un problema di moderazione; le approvazioni a passaggio singolo trattengono le risposte finché qualcuno non le esamina.

Ciò in cui questi livelli sono bravi è il caso ordinario: i compilatori automatici, gli invii in massa da un singolo script e il doppio invio accidentale.

Le domande che ci vengono poste sullo spam nei questionari

NumoForms usa reCAPTCHA?

No, ed è una decisione deliberata, non una lacuna. Aggiungere reCAPTCHA renderebbe Google un sub-responsabile in ogni consultazione pubblica, cosa di cui poi un responsabile della protezione dei dati deve rendere conto. Le sue prove basate su immagini e audio sono inoltre una causa ampiamente documentata di invii falliti per le persone con disabilità. I tre controlli che NumoForms esegue sono invisibili: non c’è alcuna prova da superare.

Che cosa succede se qualcuno risponde davvero più in fretta del tempo di permanenza minimo?

Gli viene mostrato che cosa è accaduto e può confermare l’invio, che a quel punto va a buon fine. Un questionario di due domande si compila davvero in meno di tre secondi, quindi un rifiuto secco butterebbe via risposte autentiche. Perdere una risposta vera a una consultazione è peggio che accettarne una spazzatura.

Perché applicare i controlli antispam nel database anziché nel modulo?

Perché le risposte vengono inserite direttamente dal browser nel database. Tutto ciò che è controllato solo nell’interfaccia può essere aggirato da uno script che invia direttamente, quindi un controllo a livello di interfaccia è un suggerimento e non una misura. NumoForms esegue i controlli su honeypot, tempo di permanenza e limite di frequenza in un trigger di database, attraverso il quale passa ogni inserimento, da qualunque parte provenga.

Quali sono i valori predefiniti di tempo di permanenza e limite di frequenza?

La soglia minima di permanenza è preimpostata a 3 secondi ed è configurabile per singolo questionario. Il limite di frequenza è preimpostato a 30 risposte al minuto per questionario. Il limite di frequenza non richiede nulla dal client, quindi vale anche per un bot che elimini del tutto i metadati temporali.

NumoForms blocca lo spam per indirizzo IP?

No. Non esiste alcun blocco basato sull’IP né alcuna integrazione con Cloudflare Turnstile. La protezione è data dall’honeypot, dalla soglia minima di permanenza e dal limite di frequenza per singolo questionario, tutti applicati nel database.

Filtrate la spazzatura senza un rompicapo.

L’honeypot, la soglia di tempo trascorso e il limite di frequenza per questionario girano in un trigger del database, così ogni risposta li attraversa qualunque sia la via da cui è arrivata. A chi risponde non viene mai chiesto di riconoscere un autobus.

  • Tre livelli: honeypot, tempo trascorso, limite di frequenza
  • Soglia di tempo configurabile per questionario, 3 secondi di default
  • Chi viene segnalato può confermare e proseguire
Iniziate a costruire