Bli spamfri II – med PHP
torsdag 11. mai 2006

Jeg har tidligere kommet med et tips for å redusere mengden spam som havner i innboksen. Der var det noen som ganske riktig kommenterte: «En annen måte å unngå spam på, er å ikke legge epost addressen din ut på nett». Men for enkelte er ikke dét et alternativ; og det finnes måter å legge ut e-postadressen på nettet, uten at spambotene får kloa i dem. Jeg tenkte jeg skulle nevne én av dem, som benytter PHP.
Alt som trengs for å benytte denne metoden er en webserver med PHP 4.3.0 eller høyere1.
Fra PHP 4.3.0 finnes en funksjon som heter str_rot13 (funksjonen ble først stabil i denne versjonen), som kort og godt lar deg benytte den smågeniale ROT13-funksjonen. Det ROT13 gjør, er å rotere alle bokstaver i alfabetet (A-Z) 13 ganger møt «høyre». A blir da M, B blir N, osv. Dette kan vi bruke til å «kryptere» e-postadresser, slik at de blir ubrukelige for spidere og andre høstere av slike adresser2.
Kjører vi str_rot13 på e-postadressen ditt.navn@example.com blir resultatet qvgg.ania@rknzcyr.pbz – temmelig ubrukelig, med andre ord.
Dermed kan vi lage klikkbare e-postlinker med følgende kode:
<a href="email.php?mailto=<?php echo str_rot13('ditt.navn@example.com'); ?>">E-post</a>
Men så må vi «dekryptere» adressen igjen. Dette gjør vi med en enkel PHP-fil, som vi kan kalle email.php, hvor vi sender den krypterte adressen som en streng.
Filen email.php skal se slik ut:
<?php
$mail = ($_GET['mailto']);
if (isset ($mail)) {
$mail = str_rot13 ($mail);
header ("Location: mailto:$mail");
}
else {
$error = 'empty';
} ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html lang="no">
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<title>E-post</title>
<?php if ($error != 'empty') echo ("<meta http-equiv="refresh" content="0;url=javascript:history.back()">"); ?>
</head>
<body>
<?php
if ($error != 'empty') echo ("<p>Åpner ny melding i e-postklienten.</p>");
else {echo ("<p>Ingen e-postadresse ble oppgitt.</p>");
?>
</body>
</html>
Hva denne filen gjør, er å ta imot strengen vi sendte, dekryptere den og sjekke at den ikke er tom. Hvis en gyldig adresse ble funnet åpnes et nytt meldingsvindu i brukerens standard e-postklient med e-postadressen i To:-feltet. Deretter sendes brukeren tilbake til websiden hun kom fra (hvor hun klikket på e-postlinken).
Enkelt! Du kan ha klikkbar e-postlink, men spamrobotene får ikke tak i adressen din2.
1)
For å finne ut om webserveren din har PHP, og evt. hvilken versjon, lager du en fil som heter phpinfo.php, som innholder strengen <?php phpinfo() ?>. Last den opp til webområdet ditt, og åpne www.example.com/phpinfo.php i en nettleser.
2)
Fordi den dekrypterte e-postadressen aldri vises i klartekst i koden noe sted, men kun sendes via header, er sjansen for at spambotene skal klare å lese den minimale. Jeg kan likevel ikke utelukke at det, iallefall på sikt, kan finnes spamboter som klarer å lese headere og dermed få tak på adressen.
(Hvis noen kan komme med mer fakta om dette, vil jeg gjerne høre om det. Bruk kommentarfeltet.)

15. mai 2006
00:00 #
Genialt - er litt tungvint for de "mindre lærde" å finne ut hva [at] og [dot] betyr (jeg skriver bestandig navn[at]mail[dot]com for å forhindre spam), så dette må definitivt prøves.
25. mai 2006
00:00 #
En grei måte å gjøre det på men den fordrer jo at "klienten" er satt opp til å følge headerinformasjon som ber den gå en annen plass (eks: header("Location: …");). Jeg vil nok tro at fåtallet som ikke gjør det er godt klar over det og vet hvordan man skal jobbe seg "videre", men det må likevel være satt opp rett.
Og så har man jo alltid scenarioet med Lynx og Links der ikke brukeren har en fungerende epostklient tilgjengelig. Men det er vel, jo … "sååå 80-talls"