4.9k Aufrufe
Gefragt in Webseiten HTML von
Guten Abend allerseits,

ich bin seit Tagen wieder mit Erfolg an meinem Gästebuch. Ich bin endlich den lästigen Spam losgeworden, worum ich auch froh bin, doch ein Problem regt mich schon seit Stunden auf... . Ich probiere if-Abfragen zusammenzufassen, weiß jemand wie ich das hinbekomme? Ich möchte halt, dass bei folgenden "Keywords" nur EIN $err_text ausgegeben wird. Die Abfrage sieht folgendermaßen aus:

<?php
if(strpos($gb_text, "http://") !== false ||
ereg("(www.[a-zA-Z0-9_-]+)\.([a-zA-Z0-9.]+)",$gb_text)) {
$err_text .= "Bitte keine URLs posten!";
}
if(strpos($gb_text, "<url>") !== false) {
$err_text .= "<br>";
}
if(strpos($gb_text, "<a href=") !== false) {
$err_text .= "<br>";
}
?>

26 Antworten

0 Punkte
Beantwortet von supermax Experte (4.8k Punkte)
Gegen menschliche Spammer hilft der Einsatz eines CAPTCHAs z.B. reCAPTCHA. Gegen Bots verwende ich ein zufällig generiertes "Token", das sich bei jedem Seitenaufruf ändert; nur wenn vorher das Formular aufgerufen wurde, ist das Token beim POST gesetzt, andernfalls wurde das Script direkt aufgerufen, also vermutlich durch einen Bot.
0 Punkte
Beantwortet von
Kannst du mir mal bitte so ein Token-Script posten? :) In anderen Gästebüchern, bei denen keine Captchas oder unsichtbare Inputs genutzt werden ist ja auch kein Spam... :(
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
egen Bots verwende ich ein zufällig generiertes "Token", das sich bei jedem Seitenaufruf ändert;
Du meinst hoffentlich, welches sich für die jeweilige Benutzersitzung bei jedem Seitenaufruf ändert. Andernfalls ruft ein Besucher die Seite auf - und während der schreibt, ruft der nächste Gast die Seite auf und generiert damit wieder ein neues, welches nicht mehr zu dem des ersten Besuchers passt.
0 Punkte
Beantwortet von supermax Experte (4.8k Punkte)
Ja natürlich, das Token wird in der Session gespeichert und beim POST das übergebene Token mit dem Session-Wert verglichen, also
<?php
$_SESSION['token'] = md5(microtime());
//...
?>
<form>....
<input type="hidden" name="t" value="<?php echo $_SESSION['token'] ?>">
</form>

In dem Script/Code, der die POST-Daten überprüft steht dann

if ( (strlen($_POST['t'])==0) || ($_POST['t'] != $_SESSION['token']) ) {
$error[] = 'Sicherheitscode ungültig';
}
0 Punkte
Beantwortet von
In dem Script/Code, der die POST-Daten überprüft steht dann
if ( (strlen($_POST['t'])==0) || ($_POST['t'] != $_SESSION['token']) ) {
$error[] = 'Sicherheitscode ungültig';
}


Okay, habe es mal eingebaut, hoffe, dass es funktioniert... :D Kann ich das vielleicht so abändern, dass es in meinen $err_text miteingebunden wird?

Bsp.:
if ( (strlen($_POST['t'])==0) || ($_POST['t'] != $_SESSION['token']) ) {
$err_text .= "Sicherheitscode ungültig!";
}
0 Punkte
Beantwortet von
Das hat nichts gebracht, es kam wieder Spam rein! :( Ich bin echt am verzweifeln, bin schon am überlegen ob ich's einfach überfluten lasse oder gleich lösche, hat ja dann auch keinen Sinn mehr! :(
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Beendest du das Skript denn überhaupt, wenn du Meldungen ausgibst - oder trägt es dennoch alle Daten in *wo auch immer* ein? Zeig uns bitte das komplette Skript.
0 Punkte
Beantwortet von
Ich verstehe zwar nicht, was du meinst, aber hier ist schon einmal das Gästebuch-Script: www.speedyshare.com/764836352.html
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
if ( (strlen($_POST['t'])==0) || ($_POST['t'] != $_SESSION['token']) ) {
$error[] = 'Sicherheitscode ungültig';
}

$CodeValid = 1;
Das Token ist wirkungslos - du musst natürlich den Text in $err_text reinschieben, denn später prüfst du nicht, ob $error Werte enthält. Und warum setzt du $CodeValid auf 1??
0 Punkte
Beantwortet von
Habe ich nicht, das stand da schon^^ Ich nutze ja ein Fertiggästebuch und habe es nur abgeändert! ;)

Also muss ich es dann so einsetzen:

if ( (strlen($_POST['t'])==0) || ($_POST['t'] != $_SESSION['token']) ) {
$err_text .= "Sicherheitscode ungültig!";
}
?
...