zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden Strings die HTML Tags enthalten erkennen?

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 28.12.2008, 16:56
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 24.09.2003
Beiträge: 243
braindead befindet sich auf einem aufstrebenden Ast
Standard 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?
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 28.12.2008, 17:18
Benutzerbild von fox
fox fox ist offline
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 11.09.2006
Beiträge: 1.008
fox sorgt für eine eindrucksvolle Atmosphärefox sorgt für eine eindrucksvolle Atmosphäre
Standard

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
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 28.12.2008, 19:17
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 24.09.2003
Beiträge: 243
braindead befindet sich auf einem aufstrebenden Ast
Standard

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.
Mit Zitat antworten
  #4 (permalink)  
Alt 30.12.2008, 17:19
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 24.09.2003
Beiträge: 243
braindead befindet sich auf einem aufstrebenden Ast
Standard

Ä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.
Mit Zitat antworten
  #5 (permalink)  
Alt 30.12.2008, 17:44
Benutzerbild von fox
fox fox ist offline
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 11.09.2006
Beiträge: 1.008
fox sorgt für eine eindrucksvolle Atmosphärefox sorgt für eine eindrucksvolle Atmosphäre
Standard

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).
Mit Zitat antworten
  #6 (permalink)  
Alt 30.12.2008, 18:28
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 24.09.2003
Beiträge: 243
braindead befindet sich auf einem aufstrebenden Ast
Standard

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)
Mit Zitat antworten
  #7 (permalink)  
Alt 30.12.2008, 18:40
Benutzerbild von fox
fox fox ist offline
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 11.09.2006
Beiträge: 1.008
fox sorgt für eine eindrucksvolle Atmosphärefox sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von braindead Beitrag anzeigen
...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.
Aber ich frage mich dennoch, warum du so etwas überhaupt erst versprichst. Wenn nun ein Benutzer auf die Idee kommt, ein Beispiel mit HTML zu schreiben? Dann sperrst du den auch aus, bzw. muss er das HTML erst umständlich maskieren damit es erlaubt wird. Ich sehe darin keinen Sinn, einen Bot anhand der eingegebenen Zeichen (damit meine ich jetzt nicht Viagra, etc.) erkennen und blockieren zu wollen. Zumindest schränkst du deine Besucher damit ein, durch das "Versprechen" Kommentare mit HTML-Tags zu blockieren würde ich mich auf alle Fälle wundern, warum du nicht eine andere Anti-Spam-Technik einsetzt, die den Besucher nicht behindert. Schließlich machst du das nicht aus Sicherheitsgründen - da würde htmlspecialchars() ja schon ausreichen.

Um aber auf deine Frage zurückzukommen: Du kannst BB-Code mit entsprechenden Regulären Ausdrücken finden (preg_match) und filtern (preg_replace). Kleiner Ansatz:

PHP-Code:
// entfernt b, i, u, erhält aber den inhalt des tags - ungetestet
$text preg_replace ('~\[(b|i|u)\](.*)\[\1\]~i''$2'$text); 

Geändert von fox (30.12.2008 um 18:47 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 30.12.2008, 18:54
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 24.09.2003
Beiträge: 243
braindead befindet sich auf einem aufstrebenden Ast
Standard

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.
Mit Zitat antworten
Antwort


Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ä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


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:02 Uhr.