DNS, Email & Deliverability

Hvorfor kontaktskjemaet ditt er den største spamrisikoen

De fleste kontaktskjemaer er konfigurert til å sende e-post direkte fra brukerinput. Det gjør dem trivielle å utnytte.

The Wux Webtools Team The Wux Webtools Team 8 min lesing AI-assistert, menneskelig vurdert
Abstract illustration of a contact form with warning symbols representing spam vulnerability
Innholdsfortegnelse
  1. Problemet er eldre enn du tror
  2. Hva som gjør kontaktskjemaer så lette å utnytte
  3. Riktig måte å sende e-post fra kontaktskjemaer på
  4. Hastighetsbegrensning er ikke valgfritt
  5. CAPTCHA-er er en avveining, ikke en løsning
  6. Når du bør bruke en tredjeparts skjematjeneste
  7. DMARC-problemet
  8. Hva med [samtykke til informasjonskapsler og skjemasporing](/nb/blogg/2026-05-02-what-changed-for-cookies-in-2026-and-what-to-do-about-it)?
  9. Viktige punkter
  10. FAQ
  11. Kilder

Problemet er eldre enn du tror

Kontaktskjemaer har vært en spamvektor siden tidlig på 2000-tallet, men problemet har blitt verre etter hvert som e-postleverandører har strammet inn kravene til autentisering. De fleste kontaktskjemaer bygges fortsatt på samme måte: Brukeren fyller ut et skjema, serveren din sender en e-post med brukerens adresse i From-headeren, og du venter på svar.

Dette er en skolebokeksempel på en sårbarhet for e-postforfalskning. Spammere kan bruke skjemaet ditt til å sende e-post som ser ut til å komme fra hvilken som helst adresse de ønsker, rutet gjennom IP-adressen til serveren din. Hvis nok spam sendes på denne måten, blir domenet ditt flagget, og legitim transaksjons-e-post slutter å nå innbokser.

Løsningen er enkel, men de fleste veiledninger gjør det fortsatt feil.

Hva som gjør kontaktskjemaer så lette å utnytte

Et typisk kontaktskjema godtar tre felt: navn, e-post og melding. Handleren på serversiden tar den e-postadressen og legger den direkte inn i From-headeren i en utgående SMTP-melding. Dette er praktisk for svar — du kan bare trykke på "svar" i innboksen — men det er også en gavepakke til spammere.

Slik skjer det når en spammer finner skjemaet ditt:

  1. De sender inn skjemaet med en offers e-postadresse i "from"-feltet
  2. Serveren din sender pliktoppfyllende en e-post med offerets adresse i From-headeren
  3. Offerets e-postserver ser e-post som hevder å komme fra domenet deres, men som kommer fra IP-adressen din
  4. Hvis domenet ditt mangler riktige SPF/DKIM/DMARC-oppføringer (eller selv om det har dem), kan e-posten likevel slippe gjennom fordi mange servere er ettergivende med trafikk fra kontaktskjemaer
  5. Offeret mottar spam som ser ut til å komme fra deres egen adresse, eller domenet ditt blir flagget for forfalskning

Dette er ikke et teoretisk angrep. Det skjer hele tiden. Hvis du driver et kontaktskjema og aldri har sjekket e-postserverloggene dine, blir du sannsynligvis allerede brukt på denne måten.

Riktig måte å sende e-post fra kontaktskjemaer på

Løsningen er å aldri legge brukerinput i From-headeren. I stedet:

  • From: [email protected] (eller en hvilken som helst adresse du kontrollerer)
  • Reply-To: Brukerens innsendte e-postadresse
  • Subject: Ta med brukerens navn hvis du vil, men aldri e-postadressen deres
  • Body: Ta med alle skjemadata, tydelig merket

På denne måten sender serveren din bare e-post fra adresser du eier og har autentisert riktig. Når du trykker på "svar" i innboksen, går det fortsatt til brukeren — det er det Reply-To gjør. Men spammere kan ikke bruke skjemaet ditt til å utgi seg for å være vilkårlige adresser.

De fleste e-postbiblioteker støtter dette rett ut av boksen. I PHPs PHPMailer:

$mail->setFrom('[email protected]', 'Contact Form');
$mail->addReplyTo($_POST['email'], $_POST['name']);

I Pythons smtplib med email.mime:

msg['From'] = '[email protected]'
msg['Reply-To'] = form_data['email']

I Node.js med Nodemailer:

const mailOptions = {
  from: '[email protected]',
  replyTo: req.body.email,
  // ...
};

Hvis kontaktskjemaet ditt i dag legger brukerinput i From-headeren, er dette en énlinjes fiks. Gjør det i dag.

Hastighetsbegrensning er ikke valgfritt

Selv med god header-hygiene er et ubeskyttet kontaktskjema fortsatt en spamvektor. Spammere vil sende inn skjemaet ditt hundrevis av ganger med ulike meldingstekster, og innboksen din fylles med søppel.

Du trenger hastighetsbegrensning på flere nivåer:

  • Per IP: Ikke mer enn 5 innsendinger per time fra samme IP
  • Per e-post: Ikke mer enn 3 innsendinger per dag fra samme e-postadresse
  • Globalt: Ikke mer enn 50 innsendinger per time på tvers av alle brukere (juster basert på trafikken din)

Hastighetsbegrensning hører hjemme i applikasjonskoden din, ikke bare i konfigurasjonen til webserveren. Hastighetsbegrensning i Nginx og Apache kan hjelpe, men de opererer på forespørselsnivå og kjenner ikke til e-postadresser eller misbruksmønstre som er spesifikke for skjemaer.

Hvis du bruker et rammeverk, finnes det sannsynligvis en middleware for hastighetsbegrensning du kan legge inn. Hvis du bygger fra bunnen av, fungerer en enkel Redis-teller med utløpende nøkler fint:

key = f"contact_form:{ip_address}"
count = redis.incr(key)
if count == 1:
    redis.expire(key, 3600)  # 1 hour
if count > 5:
    return error("Rate limit exceeded")

Dette er ikke skuddsikkert — spammere kan rotere IP-adresser — men det øker kostnaden ved misbruk betydelig.

CAPTCHA-er er en avveining, ikke en løsning

Googles reCAPTCHA v3 er usynlig og scorer brukere basert på atferd, noe som høres ideelt ut. I praksis blokkerer det legitime brukere oftere enn du skulle tro, særlig brukere på VPN-er, Tor eller delte bedriftsnettverk.

reCAPTCHA v2 (avkrysningsboksen "I'm not a robot") er mer pålitelig, men legger til friksjon. Honeypot-felt — skjulte skjemainndata som mennesker ikke fyller ut, men roboter gjør — fanger enkle roboter uten påvirkning på brukeren, men de er trivielle å omgå for enhver seriøs spammer.

Den beste tilnærmingen er lagdelt:

  1. Riktige e-postheadere (ikke til forhandling)
  2. Hastighetsbegrensning (ikke til forhandling)
  3. Honeypot-felt (en enkel gevinst, uten ulemper)
  4. CAPTCHA bare hvis du fortsatt får betydelig spam etter punktene over

Hvis du legger til en CAPTCHA, bruk reCAPTCHA v3 med en lav terskel (0,5 eller lavere) og et fallback til v2 for brukere som får lav score. Dette holder friksjonen lav for de fleste brukere, samtidig som roboter fortsatt blokkeres.

Når du bør bruke en tredjeparts skjematjeneste

Hvis du driver et lite nettsted og ikke vil vedlikeholde skjemainfrastruktur, håndterer tredjepartstjenester som Formspree, Tally eller Netlify Forms alt dette for deg. De hastighetsbegrenser, validerer og sender e-post fra sine egne domener, slik at omdømmet ditt forblir rent.

Avveiningen er at du sender brukerdata til en tredjepart, noe som kan komme i konflikt med personvernerklæringen din eller GDPR-forpliktelser. Behandling av data på klientsiden er en voksende trend for personvernbevisste team, men kontaktskjemaer krever i sin natur behandling på serversiden — du kan ikke sende e-post fra nettleseren uten å eksponere legitimasjon.

Hvis du håndterer sensitive henvendelser (juridiske, medisinske, finansielle), bør du sannsynligvis drifte din egen skjemainfrastruktur. For alt annet er en tredjepartstjeneste et fornuftig valg.

DMARC-problemet

Selv om du fikser headerne i kontaktskjemaet, er du ikke trygg hvis domenet ditt mangler en DMARC-policy. DMARC forteller mottakende e-postservere hva de skal gjøre med e-post som feiler SPF- eller DKIM-kontroller. Uten det kan spammere fortsatt sende e-post som ser ut til å komme fra domenet ditt, selv om de ikke bruker serverne dine.

Å sette opp DMARC er utenfor rammen av denne artikkelen, men hvis du tar e-postomdømme på alvor, er det ikke til forhandling. Start med en policy kun for overvåking (p=none) og gå gradvis over til p=quarantine eller p=reject etter hvert som du verifiserer at legitim e-post er riktig autentisert.

Hva med samtykke til informasjonskapsler og skjemasporing?

Hvis kontaktskjemaet ditt bruker analyseverktøy eller markedsføringspiksler til å spore innsendinger, er du sannsynligvis underlagt GDPR- og ePrivacy-regler. De fleste kontaktskjemaer trenger ikke sporing — du vet allerede at noen sendte inn skjemaet fordi du mottok e-posten — men hvis du bruker noe som Facebook Pixel eller Google Analytics-hendelser, trenger du uttrykkelig samtykke før disse skriptene lastes.

Den enkleste tilnærmingen er å ikke spore innsendinger fra kontaktskjemaer i det hele tatt. Hvis du må spore dem, last inn sporingsskript først etter at brukeren har samtykket, og sørg for at samtykkebanneret ditt er i samsvar med reglene.

Viktige punkter

  • Legg aldri brukerinnsendte e-postadresser i From-headeren. Bruk Reply-To i stedet.
  • Hastighetsbegrensning er obligatorisk. Implementer den på applikasjonsnivå, ikke bare i webserveren.
  • Honeypot-felt er en gratis gevinst. CAPTCHA-er bør være siste utvei.
  • Tredjeparts skjematjenester er et fornuftig valg for små nettsteder, men de innebærer personvernavveininger.
  • Hvis du sender e-post fra domenet ditt, trenger du en DMARC-policy.

FAQ

Q: Kan jeg bare deaktivere kontaktskjemaet og bruke en mailto-lenke i stedet?

A: Det kan du, men mailto-lenker eksponerer e-postadressen din for skrapere, og du mister muligheten til å samle inn strukturerte data. Hvis spam er overveldende, er en mailto-lenke bedre enn et ødelagt kontaktskjema, men å fikse skjemaet er bedre enn begge deler.

Q: Hva om jeg må sende e-post fra brukerens adresse av legitime grunner?

A: Det trenger du nesten helt sikkert ikke. Hvis du tror du gjør det, prøver du sannsynligvis å løse et arbeidsflytproblem (som ruting av svar) som Reply-To allerede løser. Hvis du faktisk trenger å sende e-post fra vilkårlige adresser, trenger du en dedikert e-posttjeneste med riktig autentisering, ikke et kontaktskjema.

Q: Hvordan vet jeg om kontaktskjemaet mitt allerede misbrukes?

A: Sjekk e-postserverloggene dine for utgående SMTP-tilkoblinger. Hvis du ser et høyt volum av utgående e-post til adresser du ikke kjenner igjen, eller hvis domenet ditt har blitt flagget av spamdatabaser som Spamhaus, blir du sannsynligvis brukt som relé. Verktøy som MXToolbox kan sjekke domenets omdømme.

Q: Er det trygt å bruke en gratis CAPTCHA-tjeneste?

A: Googles reCAPTCHA er gratis og mye brukt, men den sender brukerdata til Google, noe som kan komme i konflikt med personvernerklæringen din. hCaptcha er et personvernfokusert alternativ som ikke trener AI-modeller på brukerne dine. Cloudflare Turnstile er et annet alternativ som er mindre påtrengende enn tradisjonelle CAPTCHA-er.

Q: Hva er forskjellen mellom SPF, DKIM og DMARC?

A: SPF lister hvilke e-postservere som har lov til å sende e-post fra domenet ditt. DKIM signerer utgående e-post kryptografisk, slik at mottakere kan verifisere at den ikke er tuklet med. DMARC knytter dem sammen og forteller mottakere hva de skal gjøre hvis en e-post feiler SPF- eller DKIM-kontroller. Du trenger alle tre for riktig e-postautentisering.

Kilder

Five-step flow showing how a spammer abuses a contact form by putting a victim email in the From header, causing spoofed mail to pass through your server
InfographicHow a contact form turns into a spoofing relay — A simple five-step chain shows how one unsafe header turns your form into a spam relay
Side-by-side comparison of unsafe and safe contact form email headers, showing user email in From on the left and Reply-To on the right
InfographicWrong vs right contact form email headers — The safe pattern is simple: your domain in From, user input only in Reply-To
Checklist-style security stack for contact forms with exact rate limits, honeypot, and CAPTCHA fallback thresholds
InfographicLayered defenses for contact form spam — Start with headers and rate limits, then add honeypots, and only use CAPTCHA as a fallback

Ofte stilte spørsmål

Kan jeg bare deaktivere kontaktskjemaet og bruke en mailto-lenke i stedet?
Det kan du, men mailto-lenker eksponerer e-postadressen din for skrapere, og du mister muligheten til å samle inn strukturerte data. Hvis spam er overveldende, er en mailto-lenke bedre enn et ødelagt kontaktskjema, men å fikse skjemaet er bedre enn begge deler.
Hva om jeg må sende e-post fra brukerens adresse av legitime grunner?
Det trenger du nesten helt sikkert ikke. Hvis du tror du gjør det, prøver du sannsynligvis å løse et arbeidsflytproblem (som ruting av svar) som `Reply-To` allerede løser. Hvis du faktisk trenger å sende e-post fra vilkårlige adresser, trenger du en dedikert e-posttjeneste med riktig autentisering, ikke et kontaktskjema.
Hvordan vet jeg om kontaktskjemaet mitt allerede misbrukes?
Sjekk e-postserverloggene dine for utgående SMTP-tilkoblinger. Hvis du ser et høyt volum av utgående e-post til adresser du ikke kjenner igjen, eller hvis domenet ditt har blitt flagget av spamdatabaser som Spamhaus, blir du sannsynligvis brukt som relé. Verktøy som MXToolbox kan sjekke domenets omdømme.
Er det trygt å bruke en gratis CAPTCHA-tjeneste?
Googles reCAPTCHA er gratis og mye brukt, men den sender brukerdata til Google, noe som kan komme i konflikt med personvernerklæringen din. hCaptcha er et personvernfokusert alternativ som ikke trener AI-modeller på brukerne dine. Cloudflare Turnstile er et annet alternativ som er mindre påtrengende enn tradisjonelle CAPTCHA-er.
Hva er forskjellen mellom SPF, DKIM og DMARC?
SPF lister hvilke e-postservere som har lov til å sende e-post fra domenet ditt. DKIM signerer utgående e-post kryptografisk, slik at mottakere kan verifisere at den ikke er tuklet med. DMARC knytter dem sammen og forteller mottakere hva de skal gjøre hvis en e-post feiler SPF- eller DKIM-kontroller. Du trenger alle tre for riktig e-postautentisering.

Kilder og videre lesning

  1. OWASP: Email Header Injection
  2. RFC 5322: Internet Message Format
  3. DMARC.org: Overview
  4. Spamhaus: Domain Blocklists
Om forfatteren
The Wux Webtools Team

Sist oppdatert:

Fortsett å lese