formular prüfen alle Eingaben sollen ohne []/URL sein

keifler

Mitglied
Nun hatte ich ja schon auf meinem Server verschiedene Hackerangriffe. Und alle fingen damit an das merkwürdige mails mit merkwürdigen texten gesendet wurden. Bei der Suche nach einem Script zur Formularprüfung habe ich gemerkt, das man Fakemails nicht ausschliessen kann.

Ich brauche folgende Formularabfrage : Wenn in den übergebenen Variablen folgende Zeichen oder Zeichenketten enthalten sind, dann soll es nicht versendet werden. Die Zeichen sind folgende:

[ ] / URL

Alle gefundenen Scripte waren einfach zu umtständlich und zu umfangreich.
 
Ich würde das einfach mit [phpf]strpos[/phpf] machen:
PHP:
$badstrings = array("[", "]", "/", "URL");
$bad = false;
foreach($badstrings as $badstring)
{
  if (strpos($yourvariable, $badstring))
  {
    $bad = true;
    break;
  }
}

if ($bad==false)
{
  // senden
}
 
Im Array sind die Buchstaben/Wörter die böse sind und nicht vorhanden sein dürfen. Deine Formulardaten sind in diesem Beispiel die Variable $yourvariable.

Du müsstest halt die Prüfung für jedes Feld vornehmen.
 
Nochmal ich. Du kannst den obigen Code wie folgt ändern:

PHP:
<?php

$badstrings = array("[", "]", "/", "URL");
// Beispieldaten zum Testen
$_POST['wert1'] = "Hallo";
$_POST['wert2'] = "du";
$_POST['wert3'] = "URL";
$_POST['wert4'] = "ich";
$_POST['wert5'] = "bin";
$_POST['wert6'] = "böse";

// alle per POST übergebenen Daten werden aneinander gehängt und mit dem "-" getrennt.
// hier kommt also raus:
// Hallo-du-URL-ich-bin-böse

$gesamt = implode("-", $_POST);

$bad = false;
foreach($badstrings as $badstring) {
	if (strpos($gesamt, $badstring)) {
    	$bad = true;
    	break;
	}
}

if ($bad==false) {
  // senden
}

?>
 
Zuletzt bearbeitet:
@tombe:

Wieso hast du das break auskommentiert?
Eigentlich läuft dann die Schleife nur unnötig weiter, aber das macht ja nicht so einen großen Unterschied ;)
 
Sorry, Sorry, Sorry.

Habe bei mir erst ein bisschen testen müssen bis es so geklappt hat wie es soll und hatte da ein paar echos drin.
Dshalb habe ich die Zeile rausgenommen. Für den Echtlauf muss sie natürlich wieder rein, habe es oben geändert!
 
Kein Problem :D

Es sei aber angemerkt, falls du noch weitere Daten per POST überträgst, dass durch diese dann evtl. keine Mails verschickt werden.
 
Findet ihr das nicht alles uncool lang?

Mein Vorschlag:
Code:
if (preg_match('!URL|[\[\]/]!', implode('-', $_REQUEST))) die('Nicht gesendet!');
 
Wieso uncool?

Ich gebe zu, meine Lösung habe ich schnell hingeschrieben, ich kenne mich aber auch nicht so gut in regulären Ausdrücken aus.

Bei deinem beziehst du aber alle Request-Variablen mit ein...siehe oben (Post #8).
 
Zurück