Spamsikring

Indlæs andet indhold på denne side:

Validering i php

Siden er opdateret 11.1.2007

Ud over den generelle metode kan det være et effektivt værn at lægge en inputfelt ind i formularen - et felt, der ikke må skrives i:

<span class="ikkese">
<label for="t22">Message: </label>
<textarea id="t22" name="message" rows="2" cols="30"></textarea>
</span>

Der er så i css lavet en definition for klassen .ikkese:

.ikkese {
 display: none;
 }

Det bevirker, at levende brugere - som ser formularen i en browser - ikke får vist feltet og derfor ikke skriver i feltet. Men spambotterne forstår (endnu) ikke css, så de ser feltet og skriver i det.

Tricket er så, at man ved valideringen af input fra formularen - javascript, asp eller php - tjekker, at det "forbudte" felt er tomt. Er feltet ikke tomt, er mailen fra en spambot og mailen bliver blokeret.

Læg så denne kode øverst i det script, der modtager data fra formularen:

# er der trykket på "Send" ?
if (isset($_POST['submit'])) {

# er der skrevet i feltet "message" - det er ikke tomt?
if (!empty($_POST['message'])) {
    header ("Location: blokeret.php");
  exit;
}

Koden forudsætter, at det forbudte felt har fået name="message" (ingen andre felter i formularen må så have det navn!) og blokerer for videre behandling, hvis det felt ikke er tomt. I stedet sendes videre til en fejlside, her kaldet blokeret.php.

Du skal så naturligvis lave en side blokeret.php, hvor du skriver en ikke alt for oplysende fejlmeddelelse om, at noget gik galt.

Du kan eventuelt i stedet kalde siden afsendt.html og på siden skrive, at mailen er afsendt. Det vil ikke genere almindelige brugere, for de får af gode grunde ikke den side at se. Du skal så bare huske tilsvarende at rette henvisningen, så den rigtige side bliver sendt.


En anden mulighed er, at du - samtidig med at du tjekker, at de obligatoriske felter er blevet udfyldt - også tjekker, at det forbudte felt er tomt. Læg koden øverst i det php-script, der modtager og behandler data fra formuleren:

if (isset($_POST['submit']))
{
# tjek, at der er skrevet et navn
if (!empty($_POST['name']) &&
# tjek, at der er skrevet en e-mail-adresse
    !empty($_POST['email']) &&
# tjek, at der er skrevet et emne
    !empty($_POST['subject']) &&
# tjek, at der er skrevet en besked
    !empty($_POST['besked']) &&
# tjek, at der ikke er skrevet i feltet "message"
    empty($_POST['message']))
    {

# behandling af data og afsendelse af mail
}
else
{
echo '<p>Der skete en fejl, mail blev ikke sendt</p>';
  }
}

Er en af betingelserne i koderne herover ikke opfyldt, gives en fejlmeddelelse og mailen bliver ikke sendt.

^ Tilbage til sidens top


Selv om du laver en sådan blokering, er det desværre ikke det samme som 100% sikkerhed mod spam.

Metoden med det skjulte felt beskytter dig mod at få tilsendt en masse spam, da din mailformular ikke længere umiddelbart lader spambotterne fylde felterne ud og sende. Men der er stadig et par sikkerhedsmomenter, man skal være opmærksom på:

  1. Din email-adresse skal du passe lige så godt på som dit dankort. Du skal ikke smide kritikløst om dig med adressen. Mange websider har kun det ene formål at lokke brugerne til at levere adressen, så den kan høstes af spambotter.
  2. Din mail-formular kan misbruges til at sende spam til andre, hvis du ikke sørger for en kvalificeret validering af det, der bliver skrevet i formularens øvrige felter:
    1. I feltet til indtastning af brugernavn må der ikke forekomme hverken @, 'linjeskift' eller 'vognretur'. 1)
    2. I feltet til indtastning af brugerens afsenderadresse må der ikke forekomme hverken 'linjeskift' eller 'vognretur'.
    3. I feltet til indtastning af emne for mailen bør der ikke forekomme hverken 'linjeskift' eller 'vognretur'.

Tegnet @ har ikke noget logisk ærinde i feltet for brugernavn. Forekomst af 'linjeskift' eller 'vognretur' tyder på, at det er en forud skrevet længere tekst, der er blevet kopieret ind - 'linjeskift' eller 'vognretur' har ikke noget naturligt ærinde i de tre felter.

1) 'linjeskift' og 'vognretur' er tilsammen hvad der svarer til at trykke tastaturets [Enter] i en editor: Der hoppes ned på en ny linje og begyndes fra venstre side. Ved 'linjeskift' alene fortsættes (i teorien) på ny linje fra markørens position fra venstre før linjeskiftet.

^ Tilbage til sidens top

Valid XHTML og CSS / Copyright © Hjemmesideskolen januar 2007
Hjemmesideskolen
Du er her: Forsiden - scripts - Spamsikring
Brugere lige nu: Antal aktive brugere
Home Mail