Vanuit het verzoek om contactformulieren op websites over te schakelen naar Google Form hebben we eerder Google Form aanpassingen geïmplementeerd.
We hebben dit samengevat in columns, en gelukkig worden deze door veel mensen geraadpleegd! Dank je wel.
Valkuilen bij het maken van klantformulieren met Google Form
Het bevestigingsscherm van Google Form-aanpassingen implementeren
Vervolgens kregen we een verzoek: hoe kunnen we tegen massale spam e-mails beschermen?
Dit keer hebben we, als derde artikel in de Google Form column, spambeveiliging voor Google Form aanpassingen samengebracht.
Als eerste maatregel dacht ik: zou het mogelijk zijn om reCAPTCHA, de gratis beveiligingsservice van Google, in te voeren?
Maar,
Google Formulier heeft geen standaardinstelling of schakeloptie zoals "reCAPTCHA inschakelen". In het formuliersbewerkingsscherm zijn dergelijke items niet aanwezig, en het juiste inzicht is dat dit geen officieel ondersteunde functie van Google is.
Naar aanleiding hiervan. Bij verder onderzoek bleek dat reCAPTCHA voor Google Formulier functioneert op basis van Google's beoordeling, en we kunnen niet bepalen of het reCAPTCHA-badge verschijnt of niet!
Om te beginnen, omdat Google Form aanpassingen entry.386122698 en dergelijke veld-ID's in HTML invoeren, zijn deze allemaal zichtbaar in platte tekst. Als u deze URL en entry ID kent, is het technisch mogelijk om rechtstreeks berichten naar formResponse te sturen via eenvoudige scripts zoals curl of Python requests, zonder dat u de pagina in de browser hoeft te openen.
In werkelijkheid volgen veel spam-berichten op Google Formulier dit patroon van "het eindpunt rechtstreeks aanroepen zonder door de pagina te gaan", en dit blijft hetzelfde met reCAPTCHA erbij - tenzij tokenvalidatie aan serverzijde (zoals via GAS) wordt uitgevoerd, heeft het geen effect op de route van rechtstreekse POST-verzending en is het geen fundamentele oplossing.
Maar er zijn wel maatregelen!
In de praktijk bestaan er ook veel spambots van het generieke type dat 'contactformulieren zoekt en deze automatisch invult en verzendt' (bots die de pagina daadwerkelijk renderen en via de DOM verzenden).
Voor dit type is het controleren van de verzendknop via JS redelijk effectief. Om de nauwkeurigheid te verbeteren, raden we aan meerdere mechanismen te combineren. Deze werken allemaal zonder wijzigingen aan het HTML-bestand en je hoeft niets aan Google Forms of GAS aan te raken.
Referentie: [reddit] Hoe kan ik voorkomen dat bots mijn Google Form spammen en mijn e-mail overbelasten?
1. Genereer elke keer een willekeurige optelsom van twee getallen via JS.
Dit is een eenvoudige rekensom waarbij Math.floor(Math.random()*9)+1 willekeurig wordt gegenereerd. JS genereert willekeurig bij elke paginalaad bijvoorbeeld '3 + 5 = ?' en geeft dit weer op het scherm. De verzendknop blijft disabled totdat de gebruiker het juiste antwoord invoert.
Dit is enigszins lastig voor gebruikers, maar bots die niet op de UI reageren en toch op de verzendknop klikken, vallen hier doorgaans in.
2. Automatische detectie via honeypot-veld (onzichtbaar invoerveld)
Plaats via CSS een invoerveld buiten het scherm dat voor het menselijk oog onzichtbaar is. Mensen zullen dit veld niet gebruiken, maar bots die formulieren mechanisch volledig invullen voordat ze verzenden, vullen ook dit veld in. Dit mechanisme annuleert de verzending als dit veld bij verzending een waarde bevat.
Dit is effectief tegen bots van het type 'vul alle invoervelden op het formulier mechanisch in (ongeacht zichtbaarheid) en verzend dan'. Dit type bot komt erg veel voor, dus je kunt veel van deze maatregel verwachten.
Omdat elk type bot afzonderlijk kan worden gedetecteerd, is het combineren van beide methoden effectiever tegen spam.
Voor "directe POST-type spam zonder paginaverwijzing" blijft het effect beperkt.
Wanneer een Google Form rechtstreeks wordt aangevallen met spam zonder via de website te gaan, moet het formulier uiteindelijk opnieuw worden aangemaakt.
Als maatregel tegen "enkele veel voorkomende bottypen" zou dit toch behoorlijk effectief zijn!
Ik concentreer me op markup en ontwikkel frontends met JavaScript, React en Next.js. Het geeft me veel voldoening als een website waaraan ik heb gewerkt succesvol wordt gepubliceerd! Mijn hobby's zijn gitaar spelen. Ik ben dol op katten en zoete aardappelen🐱🍠
Hiracchi
Frontend-engineer / aangenomen in 2022