Liebe Community
Ich bin daran, das Gästebuch meiner Homepage zufolge Zuspammung mit einem Spamschutz zu versehen. Eine Möglichkeit sehe ich darin, mit einem sehr einfachen Filter das Posten von URLs zu verunmöglichen (anderen Spam als Linkspam habe ich praktisch nicht). Dabei bin ich auf den Befehl
, der in einem String untersucht, an welcher Position ein anderer String auftaucht. Da der Befehl FALSE zurückgibt, wenn der dubiose String gar nicht im ersten vorkommt, kann man das als sehr einfachen Wortfilter brauchen. Ich habe zunächst der Einfachheit halber nur Posts mit der Zeichenkette "http" ausfiltern bzw. solche Posts vereiteln wollen.
Mein Problem ist recht bizarr: Der Filter funktioniert im scharfen Test völlig einwandfrei. Und dennoch - ich kann es mir nicht erklären - kommen Spams problemlos durch, die ganz genau "http" en masse enthalten. Besonders kurios finde ich, dass der Filter einwandfrei funktioniert, wenn ich dann solche Spambeiträge (oder nur Teile davon) selber händisch als Test eingebe! Es spielt keine Rolle, ob ich die Einträge vom Plaintext der Homepage oder direkt aus der DB nehme: in beiden Fällen tut der Filter beim händischen Test wunderbar, was er soll. Wieso bei den echten Spambots dann nicht?!
Der Code:
senden3.php
Der Link zum Gästebuch: www.michaelritter.ch/gaestebuch.php
Im Moment enthält der Code bzw. das Gästebuch noch einen (nicht funktionierenden) anderen Spamfilter, der dem Poster eine Rechenaufgabe stellt. Das werde ich wieder ausbauen, da es nichts bringt. Für die Frage hier müsste das egal sein (sonst natürlich sagen!).
Ich verdanke jede Hilfe im Voraus bestens.
Lg X.
Ich bin daran, das Gästebuch meiner Homepage zufolge Zuspammung mit einem Spamschutz zu versehen. Eine Möglichkeit sehe ich darin, mit einem sehr einfachen Filter das Posten von URLs zu verunmöglichen (anderen Spam als Linkspam habe ich praktisch nicht). Dabei bin ich auf den Befehl
Code:
strpos
Mein Problem ist recht bizarr: Der Filter funktioniert im scharfen Test völlig einwandfrei. Und dennoch - ich kann es mir nicht erklären - kommen Spams problemlos durch, die ganz genau "http" en masse enthalten. Besonders kurios finde ich, dass der Filter einwandfrei funktioniert, wenn ich dann solche Spambeiträge (oder nur Teile davon) selber händisch als Test eingebe! Es spielt keine Rolle, ob ich die Einträge vom Plaintext der Homepage oder direkt aus der DB nehme: in beiden Fällen tut der Filter beim händischen Test wunderbar, was er soll. Wieso bei den echten Spambots dann nicht?!
Der Code:
senden3.php
Code:
<?php
session_start();
$_SESSION['name'] = $_POST["name"];
$_SESSION['mail'] = $_POST["mail"];
$_SESSION['nachricht'] = $_POST["nachricht"];
?>
<?php
error_reporting(E_STRICT);
ini_set("display_errors", true);
?>
<!DOCTYPE html>
<html lang="de">
<?php
include ("head.php");
?>
<body>
<div id="wrapper">
<?php
include("header.php");
?>
<div id="inhalt">
<div id="inhalt2">
<div id="links">
<h1>
Gästebuch - Senden
</h1>
<?php
$name = $_POST["name"];
$name = htmlspecialchars($name);
$mail = $_POST["mail"];
$mailkorrekt = filter_var($mail, FILTER_VALIDATE_EMAIL);
$nachricht = $_POST["nachricht"];
$nachricht = htmlspecialchars($nachricht);
$test = strpos($nachricht, "http");
if($test !== false) {
echo "<p>Bitte posten Sie keine URLs (Spamschutz)! Sie werden jetzt zum Eingabeformular
zurückgeleitet, warten Sie ein paar Sekunden...</p><br>
<meta http-equiv='refresh' content='4;URL=http://www.michaelritter.ch/schreiben1.php'>";
}
else if(empty($name)){
echo "<p>Sie haben keinen Namen angegeben. Sie werden jetzt zum Eingabeformular
zurückgeleitet, warten Sie ein paar Sekunden...</p><br>
<meta http-equiv='refresh' content='4;URL=http://www.michaelritter.ch/schreiben1.php'>";
}
else if(empty($mail)){
echo "<p>Sie haben keine Mailadresse angegeben. Sie werden jetzt zum
Eingabeformular zurückgeleitet, warten Sie ein paar Sekunden...</p>
<meta http-equiv='refresh' content='4;URL=http://www.michaelritter.ch/schreiben1.php'>";
}
else if($mailkorrekt === false){
echo "<p>Ihre Mailadresse ist nicht korrekt. Geben Sie eine korrekte
Mailadresse ein. Sie werden jetzt zum Eingabeformular zurückgeleitet,
warten Sie ein paar Sekunden...</p>
<meta http-equiv='refresh' content='4;URL=http://www.michaelritter.ch/schreiben1.php'>";
}
else if(empty($nachricht)){
echo "<p>Sie haben keinen Text ins Nachrichtenfeld geschrieben. Sie werden
jetzt zum Eingabeformular zurückgeleitet, warten Sie ein paar Sekunden...</p>
<meta http-equiv='refresh' content='4;URL=http://www.michaelritter.ch/schreiben1.php'>";
}
else {
echo "<p>Sie werden zum Spamschutz weitergeleitet. Warten Sie bitte ein paar Sekunden....</p>";
}
?>
<meta http-equiv="refresh" content="5;URL=http://www.michaelritter.ch/spamschutz.php">
</div>
<?php
include("rechts.php");
include("footer.php");
?>
</div>
</body>
</html>
Der Link zum Gästebuch: www.michaelritter.ch/gaestebuch.php
Im Moment enthält der Code bzw. das Gästebuch noch einen (nicht funktionierenden) anderen Spamfilter, der dem Poster eine Rechenaufgabe stellt. Das werde ich wieder ausbauen, da es nichts bringt. Für die Frage hier müsste das egal sein (sonst natürlich sagen!).
Ich verdanke jede Hilfe im Voraus bestens.
Lg X.