Kampf dem Spam: Spamfreies Gästebuch
Auffällige Muster
Spam zeichnet sich normalerweise durch sehr charakteristische Merkmale aus.
Besonders interessant ist hierbei die Struktur der Nachricht: Oftmals ist die
Nachricht einfach nicht formatiert, sondern ein einziger ewig langer Bandwurm
von Text, der hintereinander weg geschrieben wird. Zudem ist die Verteilung der
Verweise innerhalb des Textes interessant, wobei in einem von zwei Fällen die
Verweise scheinbar wahllos in den Text eingestreut werden. In etwa 20% aller
Fälle liegen sie geblockt als Liste vor und fallen dadurch auf.
Während eine semantische Analyse des Textes nur sehr schwer wenn überhaupt zu
realisieren ist, um unsinnige Texte mit ebenso unsinnigen Verweisen darin zu
enttarnen, lassen sich Verweislisten wesentlich einfacher aufspüren, da die
Verweise darin allesamt eine gewisse Nähe zueinander aufweisen. Zudem fällt
Spam in einigen Fällen dadurch auf, daß die Verweise in mehreren Varianten
eingetragen werden, um verschiedene Übertragungsarten abzudecken. So etwas
schaut dann i. d. R. wie folgt aus (hier als Klartextadresse, als BBcode und
HTML-Code):
http://www.example.com/viagra.html [url]http://www.example.com/viagra.html[/url] <a href="http://www.example.com/viagra.html">Viagra</a>
Ein solches Konstrukt ist grundsätzlich dubios, da es i. d. R. keinen triftigen
Grund gibt, Verweise auf diese Art und Weise zu setzen. Normalerweise paßt man
das Format an das Medium an, über das man eine Nachricht veröffentlicht: Auf
einer Webseite greift man logischerweise zu (X)HTML und in einem Forum oder
Gästebuch, das BBcode anbietet, zu einem solchen Konstrukt. Präsentiert man
dies in einem normalen, unformatierten Text, so geschieht dies im Klartext.
Sowie Sie diesem begegnen, können Sie fast sicher davon ausgehen, daß Sie es
mit irgendwelchem Unsinn zu tun haben.
Eine ewig lange Verweisliste ist ebenfalls höchst verdächtig. Meist haben Sie
davor und/oder dahinter noch etwas begleitenden Text, der nicht unbedingt zu
dem, worauf die Spammer hinauswollen, paßt und lediglich der Verwirrung dient
in der Hoffnung, daß ein Betreiber eines Gästebuches nicht merkt, was hier vor
sich geht. Wenn Ihnen also ein ewig langer Wust an Verweisen unterkommt, dann
haben Sie es so gut wie sicher mit Spam zu tun.
Aber selbst wenn die Verweise nicht dicht beieinander stehen, läßt sich meist
immer noch ein auffälliges Muster erkennen. Hierzu zählen Sie einfach die
Verweise und setzen diese in Relation zur Länge des sonstigen Textes. Treten
zuviele Verweise auf, so weist das ebenfalls auf Spam hin.
Solch merkwürdigen Verweisen können Sie recht einfach beikommen, indem Sie
diese auf Auffälligkeiten überprüfen, also gehäuft bestimmte Begriffe in ihnen
zu finden sind.
Dies können Sie ganz einfach über reguläre
Ausdrücke bewerkstelligen.
Unsinnige Daten
Weitere auffällige Merkmale sind unsinnige Zeichenketten am Anfang oder Ende
des Titels oder der Nachricht. Auch hier helfen reguläre Ausdrücke weiter, die
nach diesen eigenartigen Zeichenfolgen suchen. Werden Sie fündig, so können Sie
die Nachricht verwerfen, da es sich aller Wahrscheinlichkeit nach um Spam
handelt. Schließlich gibt es keinen Grund, unsinnige Zeichenfolgen in einer
normalen Nachricht zu verwenden.
Normalerweise werden solche Zeichenfolgen verwendet, um etwaige Filtersoftware,
die Spam aussortiert, zu verwirren, so daß sie die Spamnachricht passieren
lassen, doch läßt sich dies mit einem regulären Ausdruck ganz einfach gegen
die Spammer wenden.
Zudem sollten Sie auf jeden Fall die Formatierung des Textes analysieren.
Manche Spambots tragen mehrzeilige Daten in ein Feld ein, das per definitionem
einzeilig ist. Da es hierfür keinen Grund gibt, ist dies ein starkes Argument,
die fragliche Nachricht abzuweisen. Genauso kann es vorkommen, daß Zeilen in
einem mehrzeiligen Text ewig lang sind, was einerseits die Formatierung der
Seite empfindlich stören kann, und zweitens ergibt sowas wiederum keinen Sinn.
So lassen sich Zeilenumbrüche mit folgendem regulären Ausdruck ganz einfach
aufspüren:
Hierbei steht $oneline_data für eine Zeichenkette, das aus einem einzeiligen Eingabefeld stammt, und der reguläre Ausdruck [\r\n] schaut nach einem Zeilenumbruch (es wird sowohl nach CR als auch nach LF gesucht – jedes dieser beiden Zeichen für sich bedeutet einen Treffer). Wird ein Treffer ausgelöst, so können Sie die betreffende Nachricht verwerfen.
Ein anderes Alarmsignal sind Texte, die keinen Sinn ergeben. Zwar werden hier gültige Wörter aneinandergereiht und oftmals auch mit Verweisen gespickt, doch wäre eine aufwendige semantische Analyse des Textes erforderlich, um diese Variante des Spams zu erkennen. Dies bedarf erstens umfangreicher Kenntnisse über die verwendete Sprache und zweitens einen komplexen Algorithmus, der den Text analysiert. Dies ist jedoch ein sehr rechenzeitintensives Verfahren, was es im Vergleich zu seinem Nutzen extrem ineffizient gestaltet. Insofern empfiehlt es sich, auf einen solchen Algorithmus zu verzichten und stattdessen etwaige Nachrichten zu sichten und ggf. manuell auszusortieren.
nach obenSeltsame Verweise
Finden sich in Ihrem Gästebuch unvermittelt unsichtbare Verweise wieder?
Oder erscheint ein Verweis vollkommen fehl am Platze zu sein oder bringt er
das Layout der Seite durcheinander? In diesem Fall stimmt höchstwahrscheinlich
etwas nicht, denn welchen Sinn soll es haben, solch seltsame Verweise in einem
Gästebuch unterzubringen?
Unsichtbare Verweise sind i. d. R. nicht dafür vorgesehen, daß ein Nutzer
ihnen folgt, sondern sollen stattdessen Suchmaschinen eine Möglichkeit bieten,
die Zielseite zu erreichen. Dies kann auf verschiedene Art und Weise
bewerkstelligt werden, beispielsweise indem ein Verweis auf ein sehr schmales
Zeichen gesetzt wird, z. B. ein Leerzeichen, wobei die Unterstreichung, die
für einen Verweis typisch sind, unterdrückt wird. Alternativ wird dem Verweis
eine Stildefinition oder Klasse zugewiesen, die dafür sorgt, daß die Anzeige
des Verweises unterbunden wird – möglicherweise auch eine Kombination aus
Beidem (z. B. kann einem Verweis, der auf einem Leerzeichen liegt, die
Stilangabe visibility: hidden; zugewiesen werden,
so daß der Verweis als ganz normales Leerzeichen erscheint und nicht als
Verweis: Elemente mit dem Attribut visibility:
hidden; werden zwar nicht angezeigt, der Platz für diese wird jedoch
trotzdem belegt, so daß eine mehr oder minder große Lücke entsteht.
Allerdings reagieren Suchmaschinen mittlerweile allergisch auf diese Art der
Verschleierung und werden Seiten, auf denen diese Art Verweis auftaucht,
abwerten oder im Extremfall ganz aus ihrem Index verbannen. Somit wird zwar
der Zweck des Spams höchstens zeitlich begrenzt erreicht, doch schadet dies
der Seite, die für den Spam mißbraucht wird. Allein dies ist ein Grund, selbst
dagegen vorzugehen.
Diese Art Verweis können Sie wie folgt erkennen:
Dieses Konstrukt mag auf den ersten Blick seltsam anmuten, und zudem könnte man argumentieren, daß man lediglich nach Leerzeichen innerhalb des Verweises suchen bräuchte, doch dies könnte dann dadurch umgangen werden, daß im Innern des Verweises weitere Elemente notiert werden, die logischerweise nicht auf die Bedingung, daß nur Leerzeichen im Innern des Verweises stehen, passen. Mit diesem Konstrukt verhindern Sie jedoch genau dieses.
Ein anderes Problem sind Verweise mit einer ewig langen Zeichenabfolge darin.
Dies ist in mehr als einer Hinsicht ärgerlich, da es zum Einen den Textfluß
empfindlich stört, wenn der Verweis z. B. über den Fensterrand hinausragt –
und selbst wenn es das nicht ist, kann ein solcher Verweis einen Absatz
gehörig durcheinanderbringen und so den Lesefluß stören.
Hier hilft es, die Zeichen zwischen dem öffnenden und dem abschließenden
Verweiselement zu zählen und ggf. umzubrechen, alternativ den zu
veröffentlichenden Text komplett abzuweisen. Schließlich gibt es keinen Grund,
Verweise derart ungestalt anzulegen.
Auf die Spitze treiben ließe sich so etwas dadurch, daß man weite Teile oder
im Extremfall auch den ganzen Text als Verweis markiert. Dies brüllt einen
geradezu an, daß der Verfasser einen partout dazu animieren will, den Verweis
anzuklicken. Da dies jedoch ebenfalls nicht Sinn und Zweck der Übung ist, ist
es hier ratsam, den Text gleich komplett abzuweisen.
Wesentlich subtiler ist das Verfahren, einen Verweis innerhalb eines anderen
Verweises zu verstecken. Dies fällt am allerwenigsten auf, da es ansonsten
keine verräterische Spuren gibt, also keine Stildefinition, die den Verweis
versteckt oder Verweise mit einem aus Leerzeichen bestehenden Inhaltstext, die
vielleicht doch auffallen könnten, wenn irgendjemand genauer hinschaut. Zwar
wird hier dann auch auf einen Verweis, dessen Text aus Leerzeichen besteht,
zurückgegriffen, doch da der umgebende Text ebenfalls als Verweis
ausgezeichnet ist, fällt das nicht weiter auf – es sei denn, man läßt die
fragliche Seite von einem
Validator
überprüfen, der sich hier postwendend beschweren wird.
Gerade im Zusammenhang mit HTML versuchen Browser selbst solche Seiten
darzustellen, deren HTML-Code laut DTD ungültig ist. Gerade diese Laxheit wird
von Spammern gerne ausgenutzt.
XHTML erschwert dieses Vorhaben zwar, aber es unterbindet es dennoch nicht
hundertprozentig. Das Problem ist dabei jedoch weniger auf die Definition des
XHTML zurückzuführen, sondern ist in einigen Beschränkungen des XML, auf dem
es aufsetzt, begründet: So ist zwar eine direkte Schachtelung verboten, aber
eine indirekte Schachtelung über ein Element, das innerhalb eines Verweises
auftreten und in dem wiederum ein Verweis notiert werden darf, hebeln diesen
Schutz wieder aus.
Wenn Sie also auf einen Verweis innerhalb eines Verweises testen wollen,
bietet sich folgendes Konstrukt an:
So lahmgelegt, lassen sich Verweise zukünftig nicht mehr in anderen, sie umgebenden, Verweisen verstecken – und sollte ein Spammer auf die Idee kommen, einen Verweis zu setzen, diesen dann aber, bevor er den leeren Verweis setzt, normal zu beenden und hinter dem leeren Verweis Teil 2 des ursprünglichen Verweises zu notieren, setzen Sie ihn mit dem oben aufgeführten Verfahren zur Erkennung von Verweisen, deren Text aus Leerzeichen besteht, schachmatt.
nach obenVerdächtige Wörter
Aber auch wenn ein Dokument sich syntaktisch und logisch als sauber darstellt,
kann der Teufel immer noch im Detail stecken. Was ist beispielsweise mit einem
einzigen Verweis in einem Gästebucheintrag, der es aber in sich hat?
Hier haben Sie die Möglichkeit, nachdem die übrigen in diesem Kapitel
genannten Tests durchgeführt worden sind, sowohl das Verweisziel selbst als
auch den Text, der den Verweis letztenendes beschreibt, nach auffälligen
Wörtern, die gehäuft in Spam auftreten, abzusuchen. Dazu nehmen Sie den
Verweis einfach auseinander:
Hier wird ein Verweis zunächst einmal in das Verweisziel und den Verweistext
zerlegt. Diese lassen sich anschließend beide nach verdächtigen Wörtern
absuchen. Hierbei kann es erforderlich sein, zunächst etwaige codierte Zeichen
in Klartext zu übersetzen (dies erledigt der reguläre Ausdruck, der nach so
codierten Zeichen sucht und sie in Klartext zurückverwandelt).
Da Spammer verdächtige Wörter ab und an codieren, um sie vor einer
Inhaltsanalyse zu verstecken, können Sie dieses Verfahren mit dieser Methode
ins Leere laufen lassen, da Sie so wieder den Klartext erhalten. Diesen können
Sie dann ganz normal nach verdächtigen Wörtern absuchen.
Der zweite Ansatzpunkt ist der Verweistext, den Sie mit diesem Verfahren ebenfalls aus dem Verweis herausziehen. Selbst wenn das Verweisziel keine Anhaltspunkte liefert, kann der Verweistext sehr wohl darauf hinweisen, daß etwas nicht stimmt. Allerdings machen einige Spammer es einem hier ebenfalls nicht einfach und streuen HTML-Elemente, z. B. <span> … </span>, in den Verweistext, um hier wiederum eine lexikalische Analyse in die Irre zu führen. Dem begegnen Sie, indem Sie alles, was nach einem HTML-Element aussieht, kurzerhand aus der Zeichenkette entfernen, so daß nur noch der reine Text übrig bleibt, den Sie dann einer Textanalyse zuführen können.
Allerdings müssen Sie aufpassen, wie Sie bei der Textanalyse vorgehen. Zum Einen muß das vereinzelte Auftreten eines verdächtigen Wortes nicht gleich bedeuten, daß Spam vorliegt, aber das gehäufte Auftreten ist ein recht sicheres Indiz für Spam. Zudem müssen Sie aber auch aufpassen, daß Sie nicht versehentlich fälschlicherweise ein Spamwort erkennen, obwohl nichts dergleichen vorliegt. Hier sei einmal auf Herrn Turskis Beispiel (Absatz Inhaltsfilter zur Erkennung von Spam) mit dem Suchwort porn verwiesen: Wenn Sie einfach einen regulären Ausdruck mit diesem Suchwort aufbauen, so schlägt der Vergleich fälschlicherweise auch bei Ansporn an, obwohl es sich dabei um ein vollkommen harmloses Wort handelt. Diesem Problem können Sie jedoch vorbeugen, indem Sie den regulären Ausdruck um eine Kleinigkeit erweitern:
Durch das \b in dem regulären Ausdruck sorgen Sie dafür, daß die Überprüfung nur dann anschlägt, wenn der Suchbegriff mit porn beginnt. Zudem sorgt das i hinter dem Ausdruck dafür, daß Groß- und Kleinschreibung bei der Überprüfung keine Rolle spielt, also es vollkommen egal ist, wie das Wort geschrieben worden ist, was zudem verhindert, daß ein Durcheinander an großen und kleinen Buchstaben Ihre Überprüfung schachmatt setzt.
Das einzige Problem, das sich dabei ergibt, ist die Tatsache, daß
zusammengesetzte Wörter auf diesem Wege nicht erkannt werden und somit
gesondert abgeprüft werden müssen. So vermeiden Sie jedoch falsche Alarme.
Alternativ können Sie ganz einfach Ausnahmen definieren, indem Sie auf eine
sog. Assertion zurückgreifen und den
regulären Ausdruck entsprechend umschreiben:
In dieser Variante suchen Sie nach allem, in dem das Wort porn vorkommt, es sei denn, es beginnt mit Ans, was dann wiederum zu dem bereits angeführten Wort Ansporn führt – und dieses wollten Sie ja von der Suche ausschließen. Zudem können Sie die Assertion natürlich so erweitern, daß Sie weitere harmlose Wörter von der Suche ausnehmen können, so daß sie ebenfalls keinen falschen Alarm auslösen, z. B. den Sporn. Dazu müssen Sie lediglich die Ausschlüsse als Auswahlliste innerhalb der Assertion angeben, so daß alle Alternativen geprüft werden, um zu sehen, ob falscher Alarm vorliegt. Wenn nicht, können Sie den Spammer immer noch wie gewohnt verarzten.
nach oben