Willkommen in der Webstatt Zum Webstatt Blog und Stories
Julian am 11.02.07 14:17

Hallo,

Ich habe aktuell ein kleines Problem mit einem Gästebuch. Dort kommen täglich ca. 20-30 Spameinträge rein -.- Immer eine andere IP. Captcha und sowas zieht leider nicht. Ich vermute fast, dass das manuell eingetragen wird.
Der Inhalt sind einfache HTML-Befehle mit Links.
Da es im Gästebuch eine Möglichkeit gibt seine URL anzugeben, möchte ich nun URLs in der Nachricht komplett verbieten. Dazu muss ich die aber erstmal rausfiltern. Kann mir da jemand weiterhelfen? Ich habs nicht so mit regulären Ausdrücken etc.

netcup.de Warum gibt es hier Werbung?
nuit nuit am 11.02.07 15:09

$cont = preg_replace("/<a.*?>.*?<\/a>/is","",$cont);
werden einfach alle href rausgefiltert...wohin sie auch immer gehen....werden einfach durch nichts ersetzt


besser wäre es aber, wenn man garnicht erst eintragen könnte, dann würde sowas gut kommen:
if(preg_match("/<a.*?>.*?<\/a>/is",$cont)) {
print "aaahhah....da ist ein link drin";
}

tnY am 11.02.07 15:49

pass aber auf das dann auch andere html comandos dort nicht funktionieren... ich hatte das mal vergessen und hatte dann plötzlich ein 5000 px großes DIV über die ganze page gestreckt mit nem hackenkreuz im gästebuch^^

nuit nuit am 11.02.07 17:22

da schauste dir am besten an:
http://de.php.net/htmlentities
oder
http://de.php.net/manual/en/function.htmlspecialchars.php

wobei htmlentitites eher trifft ;)

du kannst auch einfach alles rausfiltern, was damit zu tun hat:
$cont = preg_replace(array('/<.*?>.*?<\/.*?>/is','/<.*?>/i'),'',$cont);

Julian am 11.02.07 17:30

Mein Gästebuch ist eigentlich schon ganz gut abgesichert. HTML-Code wird nicht umgewandelt, sondern angezeigt, aber das ist den Spammern wohl egal, da bekomm ich trotzdem ständig Posts rein. "Hauptsache der Link steht drin" oder so!
Jetzt hab ich eine Sperre eingebaut, dass man gar keine Einträge mit Links/URLs im Nachrichtentext einbauen kann.

Damit fang ich nun die unerwünschten Eingaben ab, in der Hoffnung dass das alles so funktioniert. Jedenfalls waren eigene Tests erfolgreich :) Jetzt heißt es erstmal abwarten.

} elseif(preg_match("/<a.*?>.*?<\/a>/is",$_POST['nachricht']) OR preg_match("/www\..*?/is",$_POST['nachricht']) OR preg_match("/http:\/\/.*?/is",$_POST['nachricht'])) {

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt