deutsch   english

Domains

Domains zu verkaufen!

Kurze und einprägsame Domains sind sehr selten.

2cent.eu
9b9.de
pik7.net
wixxer.org
0xygen.de
0xygen.net
crocodil.net
rapidlinks.de
rapidlinks.net
rapidlinks.eu
Alle verfügbaren Domains...

aktualisiert am 21.Jul.2008
Seite bewerten:

Formular-Spam-Schutz

SPAM-Schutz: E-Mail-Formulare absichern

SPAM-Schutz: E-Mail-Formulare absichern

Viele Webmaster, die Kontaktformulare in ihre Webseiten eingebunden haben, kennen das Problem: innerhalb kurzer Zeit erhält man darüber Spam. Grund ist, dass Spammer sogenannte Harvester (auch Webcrawler, Spider, Robot, oder kurz Bot genannt) benutzen. Dabei handelt es sich um eine spezielle Software, die automatisch das WWW durchsucht, dabei Webseiten analysiert und dann versucht gefundene Kontaktformulare automatisch mit Spam auszufüllen. Oder noch schlimmer: der Bot verändert die E-Mail-Kopfdaten, um zusätzliche E-Mail-Empfänger (BCC) einzutragen oder Anhänge an die E-Mail hinzuzufügen.

Um das zu verhindern, gibt es einiges zu beachten - was ich hier aber nur grob ansprechen kann, denn es würde normalerweise ganze Bücher füllen:

Umstellung der Versandmethode von GET auf POST:

Grund: bei der GET-Methode erscheinen sämtliche Formulardaten in der Browser-Adressleiste, die man sehr leicht abändern kann.

Beispiel:
[URL]?betreff=Hallo&text=blah&absender=info%40example.com%0ABcc:spam%40example.de

Da Mailheader durch Zeilenumbrüche getrennt werden müssen (RFC 822), fügt der Bot hinter der normalen Absenderadresse (hier in blau) einfach einen Zeilenumbruch (%0A) ein und fügt per Bcc (Blind Carbon Copy) eine, oder mehrere E-Mail-Adressen (hier in rot) als versteckte Kopie der E-Mail hinzu.

Achtung: die POST-Methode dagegen ist nicht wirklich sicherer - sie erschwert es aber!

Prüfung der Benutzereingaben (mit RegEx):

Dies ist der wichtigste Punkt von allen, denn keine mit POST übergebene Variable sollte ungeprüft weiterverarbeitet, oder sogar in eine SQL-Datenbank (Stichwort: SQL-Injection) abgespeichert, werden! Bei einem normalen Kontaktformular (wie auf dieser Seite ganz unten) müssen deshalb die Inhalte der 3 Formularfelder Name, Email und Kommentar überprüft werden. Diese Überprüfung löst man am elegantesten mit regulären Ausdrücken (RegEx) und der POSIX-Zeichenklasse z.B. in einem PHP-Skript:

POSIX-Zeichenklasse:
[:alnum:]  Alphanumerische Zeichen: [:alpha:] und [:digit:]
[:alpha:]  Buchstaben: [:lower:] und [:upper:]
[:blank:]  Leerzeichen und Tabulator
[:cntrl:]  Steuerzeichen. ASCII-Zeichen 00 bis 1F, und 7F (DEL)
[:digit:]  Ziffern: 0, 1, 2,... bis 9
[:graph:]  Grafische Zeichen: [:alnum:] und [:punct:]
[:lower:]  Kleinbuchstaben: nicht notwendigerweise nur von a bis z
[:print:]  Druckbare Zeichen: [:alnum:], [:punct:] und Leerzeichen
[:punct:]  Zeichen wie: ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~
[:space:]  Whitespace: horiz./vert. Tabulator, Zeilen-/Seitenvorschub, Wagenrücklauf, Leerzeichen
[:upper:]  Grossbuchstaben: nicht notwendigerweise nur von A bis Z
[:xdigit:]  Hexadezimale Ziffern: 0 bis 9, A bis F, a bis f

Mit der PHP-Funktion setlocale() werden bei der Überprüfung auch Umlaute etc. berücksichtigt:
<?php
...
setlocale(LC_ALL, 'de_DE');
...
//Es folgt die Überprüfung
...

Name:
if (preg_match('/^[[:print:]]{5,}$/', $_POST['name'])) {echo 'alles OK';}

Erläuterung: Name muss mindestens 5 Zeichen Text ohne Umbruch enthalten.

Email:
if (preg_match('/^[^@\s]+@([-a-z0-9]+\.)+[a-z]{2,}$/i', $_POST['email'])) {echo 'alles OK';}

Erläuterung: wäre hier zu langwierig, siehe reguläre Ausdrücke

Kommentar:
if (preg_match('/^[[:print:][:space:]]{20,}$/', $_POST['kommentar'])) {echo 'alles OK';}

Erläuterung: Kommentar muss mindestens 20 Zeichen Text und kann Umbrüche enthalten.

Entschärfen von Formulardaten (HTML-Tags und Steuerzeichen):

Nicht immer ist es möglich seine Formulardaten mit regulären Ausdrücken zu prüfen. Glücklicherweise bietet PHP einige hilfreiche Funktionen an:

htmlentities() - wandelt alle geeigneten Zeichen in entsprechende HTML-Codes um.
Beispiel: aus <b>fett</b> wird &lt;b&gt;fett&lt;/b&gt;
Die Funktion ist komplett identisch zu htmlspecialchars(), allerdings wandelt htmlentities() wirklich alle Zeichen, die eine HTML-Code-Entsprechung haben, in diese Entsprechung um.

htmlspecialchars() - wandelt Sonderzeichen in HTML-Codes um.
'&' (Ampersand/kaufmännisches Und) wird zu '&amp;'.
'"' (doppeltes Anführungszeichen) wird zu '&quot;', wenn ENT_NOQUOTES nicht gesetzt ist.
''' (einfaches Anführungszeichen) wird nur zu '&#039;', wenn ENT_QUOTES gesetzt ist.
'<' (kleiner als) wird zu '&lt;'
'>' (größer als) wird zu '&gt;'

strip_tags() - entfernt HTML- und PHP-Tags aus einem String
Beispiel: aus <p>Absatz</p> wird Absatz

Entschärfen von Formulardaten (vor einer Weiterverarbeitung mit MySQL):

mysql_real_escape_string() - maskiert spezielle Zeichen innerhalb eines Strings für die Verwendung in einer MySQL-Anweisung.
Die Funktion sollte immer verwendet werden, um Daten abzusichern, bevor sie per Query an MySQL übermittelt werden!

Digg Google Delicious Wong Yahoo Stumbleupon Windows Live Technorati Facebook Twitter Webnews Yigg Blinklist
User-Kommentare: Formular-Spam-Schutz
USER-KOMMENTAR
(unsichtbar)


top