PHP mehrseitiges Formular - Sicherheit

baserider

Well-known member
ID: 174417
L
10 März 2007
682
23
Hi,

wie kann ich eigentlich am besten unterbinden, das mir jemand am Formular herumspielt? Ich speichere in einem hidden-field den aktuellen Schritt. Nun kann man ja das Feld leicht manipulieren. Wie kann man nun sicherstellen, das mir niemand die Werte ändert?
 
Speicher die Werte doch einfach in einem Session-Array ;-)
Schluss mit Hidden-Feldern :D

Zusatz:
Du kannst außer den schon eingegebenen Daten natürlich auch die aktuelle Seite speichern, so dass Du nur einen Session-/Cookie-Counter benutzt. Bsp:
Code:
$_SESSION['form_step'] = 2; // Für Seite 2, usw
 
Du speicherst die Werte ja in einer Session?, wo sollen dort die Werte noch verändert werden?
 
Speicher die Werte doch einfach in einem Session-Array ;-)
Schluss mit Hidden-Feldern :D

hmm stimmt :) Da habe ich grad gar nich nachgedacht. Den Counter kann ich ja bei betätigen des vor- und zurück-Buttons einfach hochzählen oder erniedrigen :)

naja danke für den Tip, obwohl mir das hätte auch einfallen können :).
 
ja ein paar Denkanstöße sind immer gut :)
So funktionierts bei mir:

PHP:
if (!isset($_SESSION['step']) || empty($_POST)){
	$_SESSION['step'] = 1;	
}else{
	
	if (isset($_POST['back'])){
		$_SESSION['step']--;
	}
	
	if (isset($_POST['forward'])){
		$_SESSION['step']++;
	}
	
}
 
Zuletzt bearbeitet:
Jetzt muss ich nur noch hinbekommen, das beim Drücken von F5 die Schritte nicht hochgezählt werden, sondern nur wenn der Button geklickt wurde. Vielleicht hat da noch jemand einen Tip.
 
Hi,

der Button heist doch immer nur "forward" oder "back".
Dieser ist da, wenn ich das Formular normal abschicke aber auch wenn man per F5 aktualisiert ist doch der Button ebenfalls im POST-Array

Das Formular ist so angelegt, das immer nur die index.php aufgerufen wird und anhand des Zählers wir ein anderes formular angezeigt.

Wie meinst du das genau?
 
Wie wäre es, wenn du beim springen auf die nächste Seite die Daten aus dem vorherigen Formular in der Session sicherst, und dann z.b ein Header("Location: ...") auf die gleiche Seite machst.
Danach kann der User sooft auf F5 drücken wie er will, und es werden keine Post daten mehr übergeben

mfg
 
Check doch die aktuelle Seite und den pagecounter.
Beide sollten doch übereinstimmen oder nicht ?

Wenn nicht, dann halt -1 oder +1. Die Abweichung muss halt immer stimmen.
Dann kann F5 auch egal sein...
 
Check doch die aktuelle Seite und den pagecounter.
Beide sollten doch übereinstimmen oder nicht ?

Wenn nicht, dann halt -1 oder +1. Die Abweichung muss halt immer stimmen.

Das hatte ich mir auch so ähnlich gedacht. Dazu müsste ich ja fest in ein hidden Field die seitennummer reinschreiben oder? Hmm ein kleines Bsp. wie du das meinst wär gut :)
 
Die Seite ist statisch ?#
Wenn nicht, dann ändere einfach den Namen des Buttons beim vor und zurück,
das es die aktuelle Seite -/+ 1 ist.
Weniger als 1 und größer als max. is dann nicht erlaubt.
Dann speicherst in die Session den namen des Button.
Ist der aktuelle gleich dem der eingetragen werden soll, dann passiert nix !
 
Die Formulare werden über eine index-Datei automatisch angezeigt.
Ok, werd ich mal versuchen.
Aber kann man dann nicht auch manipulieren, indem man z.B. im Firebug einfach den Namen des Buttons ändert?
 
Naja wie wär's mit folgendem:
Du bist bspw. auf Seite 2.
Der User füllt brav das Formular aus, und das php-Script macht folgendes:
PHP:
switch ($_SESSION['step'])
{
   case 1:
       // Blabla
       break;
   case 2:
      // Wenn in allen Feldern was drinnen steht
     if($_POST['vorname'] && $_POST['nachname'])
     {
        $_SESSION['step']++;
     }
     // Wenn nicht, dann Fehler
     else { fehler(); }
    break;

   case 3:
     // Nächste Seite, usw..
     break;
}

Wenn nun jmd auf F5 drückt, steht in der Session, dass er auf Seite 3 ist, und checkt nicht mehr case 2 sondern case 3.

Grüße
 
Hi,

Wenn nun jmd auf F5 drückt, steht in der Session, dass er auf Seite 3 ist, und checkt nicht mehr case 2 sondern case 3.

aber genau das wollte ich ja vermeiden. Ich möchte ja nicht auf Seite 3 kommen, wenn jemand auf Seite 2 einen Reload macht.

Ich glaube ich kann nur mittels hidden Field den Reload in den Griff bekommen, denn die Session wird ja immer weiter gezählt
 
Hi,



aber genau das wollte ich ja vermeiden. Ich möchte ja nicht auf Seite 3 kommen, wenn jemand auf Seite 2 einen Reload macht.

Ich glaube ich kann nur mittels hidden Field den Reload in den Griff bekommen, denn die Session wird ja immer weiter gezählt

Ich glaub Du hast nicht verstanden was ich gemeint habe :D
Wenn jmd auf Seite 2 ist, das Formular abschickt (und somit auf Seite drei geht), dann werden die Daten auf Seite 2 gecheckt (evtl gespeichert... ;)) und dann wird in die Session geschrieben, dass er auf Seite 3 ist.
Dann kann der User so oft er will auf F5 drücken, ohne dass dies einen Effekt hat ;)
 
Hi,

und wenn man auf Seite 3 ist und f5 drückt kommt man sofort zu Seite 4, denn es wird ja immer $_SESSION['step']++ ausgeführt.. oder hab ich da grad nen Denkfehler?

[EDIT]
Ach ich glaub ich hab verstanden wie du es meinst. Man erhöht ja nicht sofort den Wert, sondern erst nachdem man auf die Felder geprüft hat
[/EDIT]
 
Zuletzt bearbeitet:
Aber in deinem Beispiel wird der Zähler erhöht, aber man springt nicht sofort zur nächsten Seite, kann das sein? Du erhöhst innerhalb des switch-Statement aber es wird ja immer am Anfang schon geprüft. Man sollte natürlich auch sofort nach Betätigung des Buttons auf die nächste Seite gelangen