 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
27.12.2005, 13:34
|
#1
|
|
TP-Moderator
Registriert seit: Mar 2003
Ort: Hamburg
|
Wortfilter bei Textbereich
Hallo zusammen 
ich bekomme in meinem Gästebuch andauernd Spameinträge, die tierisch nerven. Ungefähr dieser Art:
Jetzt wollte ich iregndwie einen Wortfilter pder ähnliches einbauen, der sagt, dass wenn jemand beispielsweise "http://" in dem Textbereich eingibt, dass dieser Beitrag nicht eingetragen wird.
Nur mir fehlt irgendwie der Begriff, die Funktion dafür
Kann mir jeamnd auf die Sprünge helfen? 
|
|
|
27.12.2005, 14:08
|
#2
|
|
TP-Urgestein
Registriert seit: Nov 2003
Ort: NRW
|
Auf der Eingabeseite würd mir da nur JS einfallen, da der Server ja noch nix bekommen hat.
IMHO besser, wenn du es vor dem Eintragen prüfst (Reguläre Ausdrücke, preg_match).
Also die an den Server geschichten Var überprüfen,wenn alles OK, eintragen, wenn nicht wieder zurückgeben und eine Fehlermeldung ausgeben, ggf.die unerlaubten Worte, URLs usw. schon rauslöschen.
|
|
|
27.12.2005, 14:39
|
#3
|
|
TP-Moderator
Registriert seit: Mar 2003
Ort: Hamburg
|
Hallo mark,
vielen Dank für deine Hilfe
hab das jetzt mal so konstruiert:
PHP-Code:
if (preg_match ("/http/i", $_POST['Nachricht'])) { echo "Sorry, aber aufgrund von Spamgefahr darfst du hier die Zeichenkette 'http' nicht verwenden"; break; } else { }
Mein Problem ist jetzt nur, dass, wenn ich die Konstruktion in den PHP-Teil vor der Doctypedeclaration einbaue, dass er mir dann einen xml-Fehler anzeigt, wenn ich es abschicke.
Es erscheint zwar die Ausgabe "Sorry, aufgrund...", aber wohl vor dem Doctype.
Kann man das irgendwie so steuern, dass er den Fehler im body anzeigt?
|
|
|
27.12.2005, 14:56
|
#4
|
|
TP-Urgestein
Registriert seit: Nov 2003
Ort: NRW
|
So?
PHP-Code:
<?
function stringcheck($foo){
if (preg_match("/http/i", $foo)) return "<div>Sorry, aber aufgrund von Spamgefahr darfst du hier die Zeichenkette 'http' nicht verwenden</div>";
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Test</title>
</head>
<body>
<?
if($test=stringcheck($_POST['Nachricht'])) echo $test;
else{
?>
<div>Ich bin der Seiteninhalt, oder hier gibt es die weitere Verarbeitung.</div>
<?
}
?>
</body>
</html>
|
|
|
27.12.2005, 18:54
|
#5
|
|
TP-Supporter
Registriert seit: Dec 2005
|
eventuell könnte man hier auch substr_count() in betracht ziehen 
Ich finde, ein Link sollte erlaubt sein  also dann einfach so machen:
PHP-Code:
$notAllow = array();
$notAllow[] = 'valium';
$notAllow[] = 'http://';
$notAllow[] = 'cheap';
$notAllow[] = 'buy';
// Maximale nicht erlaubte Wörter, um den Beitrag noch zu erlauben:
$max = 3;
function checkWords($str)
{
global $notAllow, $max;
$summe = 0;
foreach($notAllow as $ss) {
$summe += substr_count($ss, $str);
}
if($summe > $max)
return false;
return true;
}
und dann so einbauen:
PHP-Code:
if(!checkWords($_POST['eintrag']))
echo 'You are a Spammer!!!!!!!!!1111111111111';
find ich ein bischen besser 
|
|
|
27.12.2005, 20:49
|
#6
|
|
TP-Moderator
Registriert seit: Mar 2003
Ort: Hamburg
|
Danke Mark
Hi jacky,
danke für deine Lösungsidee, ich werde mal schauen, was mir besser zusagt.
Zitat:
|
Zitat von [jacky]
Ich finde, ein Link sollte erlaubt sein  also dann einfach so machen:
|
So wäre es bei mir eben am Einfachsten:
Ein Link kann ja auch ohne http angegeben werden, nru das checkt der Bot sicherlich nicht 
Außerdem hat der noch andere Sprüche auf Lager, als den oben gepostet
ICh werds mal austesten, danke
|
|
|
27.12.2005, 21:11
|
#7
|
|
TP-Moderator
Registriert seit: Mar 2003
Ort: Hamburg
|
So jacky 
Hab deinen Teil einmal bei mir eingefügt.
Jetzt kommt bei mir ejdoch eine Warnung:
http://nicogutmann.de/gaestebuch.php
Je mehr "$notAllow[] =" ich einbau, desto häufiger kommt diese Warnung 
Weißt du woran das liegt?
|
|
|
27.12.2005, 21:55
|
#8
|
|
TP-Supporter
Registriert seit: Dec 2005
|
Ändere mal
PHP-Code:
$summe += substr_count($ss, $str);
in
PHP-Code:
$summe += substr_count($str, $ss);
Ich glaube, ich habe die Parameter vertauscht 
|
|
|
27.12.2005, 22:16
|
#9
|
|
TP-Moderator
Registriert seit: Mar 2003
Ort: Hamburg
|
Danke 
jetzt habe ich bei beiden Scripten das Problem, wo ich das Ganze hinsetze, damit es klappt 
Bei beiden erscheint die gewünschte Fehlermeldungen aber der Eintrag wird trotzdem geschrieben
Ich setz mal einen Teil des Scriptes hier rein, der vor dem Doctype steht:
PHP-Code:
if(isset($_POST['send'])) {
if (isset($_SESSION['uid']) && isset($_POST['uid']) && $_SESSION['uid'] == $_POST['uid']) { unset($_SESSION['uid']);
foreach($_POST as $key=>$value) $_POST[$key]=trim(htmlspecialchars(strip_tags($value))); // Leerzeichen und HTML löschen
if((!empty($_POST['Name'])) && (!empty($_POST['Nachricht']))) { if(check_email($_POST['Email'])) { $emaildb=$_POST['Email']; } else { $emaildb=""; }
if(checkurl($_POST["Webseite"])) { $webseitedb=$_POST["Webseite"]; if(!eregi("http://", $webseitedb)) $webseitedb="http://".$webseitedb; } else { $webseitedb=""; }
$ipdb=$_SERVER['REMOTE_ADDR']; $browserdb=$_SERVER['HTTP_USER_AGENT']; $namedb=$_POST['Name']; $eintragdb=$_POST['Nachricht'];
$speichern=" INSERT INTO gaestebuch (id, name, email, webseite, eintrag, ip, browser, datum) VALUES ('', '$namedb', '$emaildb', '$webseitedb', '$eintragdb', '$ipdb', '$browserdb', CURDATE())"; mysql_query($speichern) or die(mysql_error()); } } else { echo "Spamversuch, bitte später erneut versuchen"; break; } }
|
|
|
28.12.2005, 01:16
|
#10
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
|
Du erwartest und hast doch deutschsprachige Besucher.
Da könntest Du nach Jackys Methode einfach mal engl. Ausdrücke mit Please use the German language! abweisen.
Cool usw. könnte ja erlaubt bleiben.
Wetten der ist schnell weg!?
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
|
|
|
28.12.2005, 07:04
|
#11
|
|
TP-Supporter
Registriert seit: Dec 2005
|
Hi, also ich würde es schätzungsweise (wenn ich deinen Code nun richtig verstehe) so einbauen:
PHP-Code:
if(isset($_POST['send']))
{
if (isset($_SESSION['uid']) && isset($_POST['uid']) && $_SESSION['uid'] == $_POST['uid'])
{
unset($_SESSION['uid']);
foreach($_POST as $key=>$value) $_POST[$key]=trim(htmlspecialchars(strip_tags($value))); // Leerzeichen und HTML löschen
if((!empty($_POST['Name'])) && (!empty($_POST['Nachricht'])))
{
if(check_email($_POST['Email']))
{
$emaildb=$_POST['Email'];
}
else
{
$emaildb="";
}
if(checkurl($_POST["Webseite"]))
{
$webseitedb=$_POST["Webseite"];
if(!eregi("http://", $webseitedb)) $webseitedb="http://".$webseitedb;
}
else
{
$webseitedb="";
}
if(!checkWords($_POST['Nachricht'])) {
$f = true;
echo 'SPAM VERSUCHE SIND NICHT ZULÄSSIG!';
}
if(!$f) {
$ipdb=$_SERVER['REMOTE_ADDR'];
$browserdb=$_SERVER['HTTP_USER_AGENT'];
$namedb=$_POST['Name'];
$eintragdb=$_POST['Nachricht'];
$speichern="
INSERT INTO
gaestebuch
(id, name, email, webseite, eintrag, ip, browser, datum)
VALUES
('', '$namedb', '$emaildb', '$webseitedb', '$eintragdb', '$ipdb', '$browserdb', CURDATE())";
mysql_query($speichern) or die(mysql_error());
}
}
else {
echo 'Bitte geben Sie einen Namen ein!';
}
}
else
{
echo "Spamversuch, bitte später erneut versuchen";
break;
}
}
welche 2 Zeilen ich nicht so recht verstehe:
break; am Ende in der else-Anweisung ... was bringt das? Befindet sich diser Code in ner Schleife!? Meintest du eventuell exit oder die() ?
Was soll diese Zeile hier:
PHP-Code:
trim(htmlspecialchars(strip_tags($value)));
Also ich mein, htmlspecialchar() ist doch schon grob genug, da koimmt nix mehr durch, weil alles durch die entities ersetzt wird 
Alos ich würde strip_tags() rausnehmen, dadurch wird doch nur der beitrag verfälscht 
|
|
|
28.12.2005, 09:36
|
#12
|
|
TP-Moderator
Registriert seit: Mar 2003
Ort: Hamburg
|
Hallo Jacky 
Der Code ist nicht von mir, sondern von "Boris", den er mir geliehen hat (danke dafür  )
Du hast bei deinem Beispiel nur die if-Anweisung, die dann den Hinweis wegen den Wörtern bringt, aber ich versuche den Teil mit "notAllow" einzubauen. DIe if-Anweisung habe ich in den body eingebaut. 
Könntest du nochmal nachsehen? Danke
@321:
Was in dem Hinweis steht ist doch eher zweitrangig für einen Bot, meinst du nicht?
Geändert von hero-master (28.12.2005 um 09:48 Uhr).
|
|
|
28.12.2005, 10:35
|
#13
|
|
TP-Supporter
Registriert seit: Dec 2005
|
Klar könnte ich 
Ich müsste nur verstehen, was du genau habe möchtest
Also nochmal genaz genau bitte, weil ich nicht richtig verstehe, wo das Problem liegt
Bzw poste nochmal deinen kompletten COde 
|
|
|
28.12.2005, 11:03
|
#14
|
|
| | |