online 1
gast (50)

/ Forum / Webseiten/HTML

Webseiten/HTMLWebseiten/HTML

Fragevon maine14 vom 02.06.2021, 23:55 Options

PHP if-Abfragen zusammenfassen? Bin am verzweifeln :(

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>";
}
?>


Antwort schreiben

Antwort 1 von son_quatsch vom 03.06.2021, 08:38 Options

<?php

  if ( preg_match( '#(www\\.[a-z0-9_-]+\\.[a-z0-9]+|http://|<url>|<a\\s+href=)#i', $gb_text ) ) {
    $err_text.= 'Bitte keine URLs posten!';
  }

?>

Das schützt dich dennoch nicht vor HTML-Code usw. - es bleibt weiterhin ungeprüft.

Antwort 2 von maine14 vom 03.06.2021, 10:49 Options

Wow, vielen Dank, das erste Forum, indem ich mal einen nützlichen Post zu meiner Frage erhalte, anstatt immer nur abweichende Themen... . ;) Ich werde öfters hier her kommen^^

Ganz liebe Grüße,
Maine17 :)

Antwort 3 von Supermax vom 03.06.2021, 12:29 Options

Wenn ich in meinen Projekten mehrere Fehlerquellen abfange, dann mache ich es so, daß ich ein Array anlege, etwaige Fehlermeldung als eigene Elemente an das Array anhänge und dann die einzelnen Array-Elemente mit implode() zusammenhänge, also

$errors = array();
if (fehlerbedingung1) {
   $errors[] = 'Fehler 1 ist aufgetreten';
}
if (fehlerbedingung2) {
   $errors[] = 'Fehler 2 ist aufgetreten';
}
// usw.
if (count($errors)>0) {
   echo implode('<br>',$errors);
} else {
   // weitere Verarbeitung
}


Auf diese Weise kann ich nicht nur mehrere Fehler schön zusammenhängen, sondern habe in count($errors) auch gleich einen Indikator, ob und wie viele Fehler aufgetreten sind.

Antwort 4 von maine14 vom 03.06.2021, 12:33 Options

Vorhin kam schon wieder ein langen Spameintrag rein. Wie machen das die Spammer trotz alles Fallen? Ich habe ein unsichtbares Feld, ich filter die Einträge und frage ab, ob URLs enthalten sind, ich bin langsam wirklich am Verzweifeln! :(

Antwort 5 von son_quatsch vom 03.06.2021, 12:38 Options

Spameinträge sind meist automatisiert, sprich: Programmen ist es vollkommen egal, ob da etwas "unsichtbar" ist oder nicht.

Wie äußert sich denn der Spam? Generell ungewollt? Oder sind Texte reingekommen, die bösartig sind und die du zumindest gerne ungefährlich machen willst?

Antwort 6 von maine14 vom 03.06.2021, 12:42 Options

Na ja, ich würde es mal so sehen, für eine Webseite wie meine passen einfach keine Links von Pornoseiten...

Antwort 7 von Supermax vom 03.06.2021, 12:53 Options

Wie sieht denn dein verstecktes Feld aus?

Antwort 8 von maine14 vom 03.06.2021, 13:10 Options

Zitat:
Wie sieht denn dein verstecktes Feld aus?


Unsichtbares Feld:
<input type="text" id="mail" name="mail" value="" class="p_send" />


CSS
}
.p_send {
position: relative;
visibility: hidden;
}


PHP if-Abfrage:
  } 
  if ('' !== $_POST['mail']) { 
   $err_text .= "Da Dein Eintrag verdacht auf Spam enth&auml;lt, wird diese nicht gespeichert!<br>"; 
  } else { 
    // Daten verarbeiten   
   }

Antwort 9 von maine14 vom 03.06.2021, 13:12 Options

Wenn ich das Feld "mail" ausfülle, erscheint ja auch der angegeben $err_text, trotzdem schaffen es die Spammer irgendwie alles zu umgehen! :(

Antwort 10 von son_quatsch vom 03.06.2021, 15:00 Options

Oh ok - das ist gar nicht schlecht. Trotzdem lässt sich umgekehrt per JS/Dom genausogut auch rausfinden, ob ein INPUT sichtbar oder unsichtbar ist. Zu guter Letzt kann auch immernoch ein Mensch dahintersitzen.

Antwort 11 von Supermax vom 03.06.2021, 17:17 Options

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.

Antwort 12 von maine14 vom 03.06.2021, 17:23 Options

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... :(

Antwort 13 von son_quatsch vom 04.06.2021, 07:56 Options

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.

Antwort 14 von Supermax vom 04.06.2021, 08:10 Options

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';
}

Antwort 15 von maine14 vom 04.06.2021, 11:26 Options

Zitat:
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!"; 
}

Antwort 16 von maine14 vom 04.06.2021, 12:36 Options

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! :(

Antwort 17 von son_quatsch vom 04.06.2021, 12:47 Options

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.

Antwort 18 von maine14 vom 04.06.2021, 13:17 Options

Ich verstehe zwar nicht, was du meinst, aber hier ist schon einmal das Gästebuch-Script: http://www.speedyshare.com/764836352.html

Antwort 19 von son_quatsch vom 04.06.2021, 13:40 Options

Zitat:
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??

Antwort 20 von maine14 vom 04.06.2021, 13:52 Options

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!"; 
}
?

Ähnliche Themen

php Quelltext anzeigen
Schamhorst  09.12.2007 - 162 Hits - 5 Antworten

phpBB - php in BBCode bzw. Beitrag
Magister08  26.02.2008 - 41 Hits - 3 Antworten

Emails per Telefon abfragen
sutadur  23.04.2008 - 13 Hits - 2 Antworten

Mehrere WebServer (VMs) logisch zusammenfassen?
JanSchmitte  01.08.2008 - 33 Hits - 7 Antworten

HTML site soll zu PHP werden
ta2go  21.08.2008 - 24 Hits - 6 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Mon Jan 26 09:21:55 2026