Mailadressen vor Spam-Bots schützen

10 05 2012

Die Punkkonzerte Datenbank bietet unter anderem auch ein umfangreiches Verstanstalter-Verzeichnis. Zu den Informationen gehört unter anderen eine Mail-Adresse, über die die verschiedenen Veranstalter zu erreichen sind. Nun wäre es dank der zahlreichen Spammer, die ihre Bots das Netz nach E-Mail Adressen durchforsten lassen, ziemlich fahrlässig, diese Informationen frei ins Netz zu stellen. Es würde nicht lange dauern, bis die Adressen von Spam überflutet werden. Von daher sollte bei der Angabe einer Mailadresse immer deren Schutz vor Missbrauch im Vordergrund stehen. Dazu gibt es verschiedene Ansätze, doch welche davon ist wirklich ideal?

Standardkonformes Einbinden

So ist die Einbindung einer Mailadresse vorgesehen. Das wissen natürlich auch die Spammer und suchen genau hiernach.

Beispiel:

<a href="mailto:aaaaaprvdgrwwelt@example.org">E-Mail senden</a>

Ausgabe:
aaaaaprvdgrwwelt@example.org

Vorteile:
– Standard-Methode
– Keine Probleme mit exotischen Browser-Konfigurationen zu erwarten
– Sehr einfach einzubinden

Nachteile:
– Einfacher kann man es den Spammern nicht mehr machen, an die Mailadressen zu gelangen

Hinzufügen von Text

Hier fügt man einfach einen Text zur Mailadresse dazu, der nicht hier hin gehört. Idealerweise erfolgt noch eine Erklärung, dass dieser Text zu löschen / umzuwandeln ist.

Beispiel:

<a href="mailto:aaaaaprvdgrwwelt(AT)example(PUNKT)org">E-Mail senden</a>
<a href="mailto:aaaaaprvdgrwweltKEINSPAM@example.org">E-Mail senden</a> (KEINSPAM bitte löschen)

Ausgabe:
E-Mail senden
E-Mail senden (KEINSPAM bitte löschen)

Vorteile:
– Simple Umsetzung

Nachteile:
– Nutzer müssen selbst den Text in der Mailadresse ersetzen
– Weniger versierte Nutzer wissen damit nichts anzufangen
– Unsicher, Spam Bots können die gebräuchlichsten Varianten erkennen und umwandeln

Umwandeln der Zeichen in Hex Codes

Um nicht ganz so offensichtlich eine Mailadresse zur Schau zu stellen, kann man diese auch in der  Hexadezimal-Schreibweise in die Quelle einfügen. Die Umwandlung dürfte den Spammern jedoch ähnlich leicht fallen wie einem anzeigenden Browser.

Beispiel:

<?php

$email = 'aaaaaprvdgrwwelt@example.org';
$email_laenge = strlen($email);
for ($i=0; $i < $email_laenge; $i++){
	$email_verschluesselt .= '%'.dechex(ord($email[$i]));
}
echo '<a href="mailto:'.$email_verschluesselt.'">Nachricht senden</a>';

Ausgabe:
E-Mail senden

Vorteile:
– Simple Umsetzung
– Link ist klickbar

Nachteile:
– Sehr unsicher, hier könnte man die E-Mail eigentlich auch gleich offen ins Netz stellen

Mittels CSS

Auch CSS bietet die Möglichkeit, eine Mailadresse einzubinden, die so nicht in der Quelle zu finden ist. Leider unterstützen nicht alle Browser diese Technologie.

Beispiel:

<html>
<head>
<style type="text/css">
/* \40 steht fuer das "@" Symbol */
#email:after{
content: " <aaaaaprvdgrwwelt\40 example.org>";
}
</style>
</head>

<body>
<p id="email">E-Mail senden</p>
</body>
</html>

Ausgabe:
E-Mail senden <aaaaaprvdgrwwelt@example.org>

Vorteile:
– Relativ simple Umsetzung

Nachteile:
– Funktioniert NICHT im Internet Explorer
– Text nicht mit der Maus selektierbar
– Link nicht klickbar
– Mit etwas Aufwand sollten Spam-Bots damit umgehen können

JavaScript Verschlüsselung

Mittels JavaScript kann man nach dem Laden des eigentlichen Dokuments dynamisch erst die E-Mail Adresse einbinden. Eine andere Alternative wäre, eine Mailadresse, die in der HTML Quelle als aaaaaprvdgrwwelt [BEI] example [PUNKT] org durch JavaScript zu modifizieren, so dass letztendlich wieder die korrekte Adresse heraus kommt.

Beispiel:

<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.pack.js"></script>
<script>
$(document).ready(function () {
    jQuery.fn.createMail = function () {
        this.each(function () {
            var addr = $(this).text().replace(" \[BEI\] ", "@").replace(" \[PUNKT\] ", ".");
            $(this)
                .after('<a href="mailto:' + addr + '">' + addr + '</a>')
                .remove();
        });
    };
    $(".email").createMail();
});
</script>
</head>

<body>
<span class="email">aaaaaprvdgrwwelt [BEI] example [PUNKT] org</a>
</body>
</html>

Ausgabe:
aaaaaprvdgrwwelt@example.org

Vorteile:
– Relativ Sicher

Nachteile:
– Recht hoher Aufwand zur Einbindung
– JavaScript muss beim Nutzer aktiviert sein
– Spam Bots, die einen JavaScript-fähigen Browser einsetzen können die Adresse immer noch lesen.

reCAPTCHA Mailhide

Den Captcha-Dienst von Google gibt es auch speziell für E-Mail Adressen. Es wird nur ein Auszug der Adresse angezeigt, die vollständige E-Mail erhält man erst nachdem ein Captcha gelöst wurde.

Achtung, der Fehler
Warning: pack() [function.pack]: Type H: illegal hex digit L in /www/htdocs/demo/recaptchalib.php on line 237
rührt von einem falschen Key. reCAPTCHA verwendet unterschiedliche Keys für das normale Captcha und Mailhide, diese können also nicht mehrfach verwendet werden. Der API Key muss hier angefordert werden: http://www.google.com/recaptcha/mailhide/apikey

Beispiel:

<?php

require_once ("recaptchalib.php");

$mailhide_publickey = "000000000000000000000000==";
$mailhide_privatekey = "00000000000000000000000000000000";

$mailhide_html = recaptcha_mailhide_html($mailhide_publickey, $mailhide_privatekey, "aaaaaprvdgrwwelt@example.org");
$mailhide_url = recaptcha_mailhide_url($mailhide_publickey, $mailhide_privatekey, "aaaaaprvdgrwwelt@example.org");

echo <<<AUSGABE
$mailhide_html<br />
<a href="$mailhide_url">E-Mail anzeigen</a>
AUSGABE;

Ausgabe:
aaaa@example.org
E-Mail anzeigen

Vorteile:
– Sehr sicher

Nachteile:
– Erfordert einen externen Dienst
– Umständlich zu lösen

  

Anzeige als Grafik

Um den Bots überhaupt keinen Angriffspunkt im Quelltext zu bieten, kann man die Adresse auch als Grafik ausgeben. Hierzu muss für jede einzelne Adresse eine Grafik erzeugt werden. Diese kann dann ggf. in den Cache gelegt werden.

Beispiel:

<img src="email.php?email=1" alt="E-Mail senden" />

email.php:

<?php

// Hier sollte die Adresse eigentlich aus einer Datenbank gelesen werden
$email = isset($_GET['email']) && is_numeric($_GET['email']) && $_GET['email'] == 1 ? 'aaaaaprvdgrwwelt@example.org' : 'Keine E-Mail';

$char_width = 7;
$char_height = 10;
$padding = 3;
$width = $padding * 2 + strlen($email) * $char_width;
$height = + $padding * 2 + $char_height;
$bild = imagecreatetruecolor($width, $height);
imagealphablending($bild, FALSE);
imagesavealpha($bild, TRUE);
$bg = imagecolorallocatealpha($bild, 255, 255, 255, 127);
$text = imagecolorallocatealpha($bild, 0, 0, 0, 0);
imagefilledrectangle ($bild, 0, 0, $width, $height, $bg);
imagestring($bild, 3, $padding, $padding, $email, $text);

header('Content-type: image/jpg');
imagepng($bild);
imagedestroy($bild);

?>

Ausgabe:

Vorteile:
– Recht sicher, Bots müssten OCR unterstützen – was aber nicht unmöglich ist

Nachteile:
– Text nicht auswählbar
– Link nicht klickbar

Was nun letztendlich der Weisheit letzter Schluss ist kann ich selbst nicht endgültig beantworten, lediglich unsichere Methoden wie die Hex-Schreibweise oder CSS ausschließen. Im Endeffekt haben alle Lösungen ihre Stärken und Schwächen, so dass man sich selbst für seinen Weg entscheiden muss. Im Fokus sollte hierbei jedoch immer die Sicherheit der E-Mails sein, insbesondere wenn es nicht die eigene ist. Denn wer möchte seine gut behütete Adresse in den Datenbanken der Spammer wissen, nur weil irgend ein Webmaster möglicherweise aus purer Bequemlichkeit schlampig damit umgegangen ist?

Advertisements

Aktionen

Information

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s




%d Bloggern gefällt das: