|
|||
Strings die HTML Tags enthalten erkennen?
Hi,
jeder der soetwas wie ein Gästebuch oder eine Kommentarfunktion für ein Blog betreibt das/die Posts von nicht angemeldeten Usern erlaubt, kennst sicher das Problem zugespammt zu werden. Vor einem solchen Problem stehe ich jetzt mit einem Bekannten für dessen Webseite ich ein einfaches Gästebuch script geschrieben habe (in PHP). Dieses Gästebuch wird nämlich seit einiger Zeit von einem Spambot heimgesucht, der das Gästebuch mit HTML gespickten Einträgen zumüllt. Zunächst habe ich versucht das Ganze dadurch einzudämmen das ich aus sämtlichen Eintragen mittels der PHP Funktion "strip_tags" die HTML Tags entfernen lies. Nur hindert das den Bot nicht daran weiterzumachen weshalb ich jetzt beschlossen habe einfach sämtliche Eintrage die HTML Tags enthalten einfach zu blocken d.h. nicht in der Datenbank abzulegen. Und genau um die Umsetzung dessen geht es mir in diesem Post. Meine Idee ist folgende: Ich würde gerne den Original Eintrag mit dem durch strip_tags "bereinigten" Vergleichen und für den Fall das ein Unterschied besteht, den Eintrag einfach Blocken. Dazu habe ich aber zwei Fragen: 1. Wäre für den Vergleich die Funktion "strcmp" geeignet oder gibt es da eine bessere Methode? 2. Gibt es vieleicht eine Grundsätzlich andere, also effektivere, Methode um strings die HTML Tags enthalten zu erkennen, als diesen Vorher-Nachher Vergleich durchzuführen? |
Sponsored Links |
|
||||
Hi braindead,
für dein Vorhaben würde ich empfehlen, wirklich den normalen und den mit strip_tags gekürzten String zu vergleichen (einfacher if-Vergleich mit ==). Allerdings ist das keine wirklich verlässliche Variante, um einen Spambot zu erkennen - schließlich können auch normale Benutzer HTML-Zeichen eingeben. Eine weitere Möglichkeit, HTML-Zeichen zu erkennen, wäre einfach mittels strpos() nach < oder > zu suchen. Ansonsten würde ich dir raten, dem Spambot andere Fallen zu stellen. Gibt genug Möglichkeiten, fängt an mit (wenig effektiven) CAPTCHAs, geht über einfache Rechenaufgaben und endet bei (bis jetzt wenig verbreiteten) versteckten Feldern, die nicht ausgefüllt werden dürfen. Siehe z.B.: http://xhtmlforum.de/51007-bitte-aus...tml#post377412 |
Sponsored Links |
|
|||
Ok danke, dann mach ich es so. Das die normalen Poster kein HTML benutzen können im Gästebuch, ist kein wirkliches Problem. Ich werde einfach eine Hinweisnachricht einfügen die klarmacht das HTML Posts nicht erlaubt sind und Fertig.
|
|
|||
Ähm gibt es eine Funktion die, ähnlich wie die "strip_tags" Funktion HTML Tags entfernt, diese Foren Tags entfernen kann? Also diese Tags in eckigen Klammern für das Einfügen von URLs?: Also z.b. [IMG], [URL] usw.
|
|
||||
Wenn du die nicht umwandelst stellen die doch keine Bedrohung dar? Du solltest dich mal über das KISS-Prinzip informieren Kein Besucher mag es, wenn seine Eingaben "manipuliert" werden. Ein Hinweis, dass eine Formatierung nicht möglich ist, reicht doch auch.
Eine solche Funktion gibt es nicht, die müsstest du dir selbst basteln (preg_replace). |
|
|||
Hier geht es um ein Gästebuch in dem sowieso keine [url] Tags interpretiert werden. HTML soll da auch nicht verwendet werden dürfen. Diese Einschränkungen dürften auch keinen "Gästebuch" Schreiber stören, wohl aber den Bot der das Gästebuch immer zuspammt und deshalb will ich solche einträge einfach ignorieren (die Normalen User bekommen einer Hinweis).
Ich will damit einfach zwei Fliegen mit einer Klappe schlagen 1. es sollen keine HTML Tags benutzt werden (ein Hinweis ist zwar vorhanden reicht aber nicht aus) 2. Will ich zumindest eine Klasse Spambots blocken, und zwar die Klasse der Spambots die Methoden anwendet die sowieso nicht erlaubt sind im Gästebuch, nämlich HTML. Also kann ich mit dem Blocken von HTML Einträgen (und dem Blocken von [url] Tag einträgen) beides erreichen. EDIT: in diesem Sinne ist meine Lösung insbesondere eine Lösung im Sinne des "KISS" Prinzips. Denn die Eintragsmerkmale die ich benutze um den Bot zu identifizieren sorgen nicht nur dafür das ich damit die Bot Eintrage blocken kann, sondern auch dafür mein Versprechen gegenüber den Usern einzuhalten, das ich jeden Eintrag blocke der HTML Tags oder URL Tags enthält. Und dieses Versprechen will, ich um meine Glaubwürdigkeit zu bewaren, aufjedenfall einhalten. Geändert von braindead (30.12.2008 um 18:33 Uhr) |
|
|||
Wie gesagt es handelt sich um ein Gästebuch (für die Seite eines Bekannten) und dort sind nur einträge der Art zu erwarten wie: "Hallo super seite" oder "na wie gehts" etc.
Ich will das nicht unnötig kompliziert machen. Es gibt eben nur das Problem das da alle Paar Tage ein Bot auftaucht der im 30 Minuten Rhytmus längliche und Unleserliche Beitrage abgibt die voller [url] Tags sind. Meine Lösung ist jetzt, die Eintrag durch strip_tags und zwei str_replace Funktionen zu jagen (mit dehnen ich '[URL' und '[url' entferne) und diesen String dann mit dem Original Eintrag vergleiche und bei einem Unterschied dann den Eintrag blocke. Diese Variante hält den Bot fern und beeinflusst die ganzen Gästebuchleute keineswegs, denn URLs können sie ja Posten nur eben keine Links. Ich finde diese Lösung ganz passabel. Für ein Forum oder ähnlich anspruchsvollere Scripte würde ich selbstverständlich auf weniger radikalere Weise vorgehen. |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Mit Excel HTML Tags in *.csv Daten speichern? | elTorito | Offtopic | 6 | 25.09.2009 09:39 |
Wie parse ich mit php Markdown syntax nach html? | asdfgqw | Serveradministration und serverseitige Scripte | 0 | 03.06.2008 00:11 |
[XHTML] HTML Kompatibilitätsrichtlinen 2.0a1 | gato | (X)HTML | 9 | 18.11.2007 12:28 |
Word Docs in vernünftiges HTML konvertieren? | Titus | Offtopic | 3 | 30.11.2006 10:46 |
Eigene Tags in XHTML 1.1 | x-sharp | (X)HTML | 8 | 03.03.2005 20:53 |