formulare - eindeutigkeit - überprüfen
schildi
- php
hallo,
ich stehe vor folgendem "problem"
ich habe 2 formulare auf einer seite.
ich suche nach einer möglichkeit, ein formular wirklich eindeutig bestimmen zu können, ohne dass dies durch den benutzer manipulierbar ist.
also ein hidden field in jedem formular mit zb. den werten "form_1" und "form_2", was ich dann nach dem request abfrage um zu unterscheiden, ist mir irgendwie zuwenig.
gibt es ne möglichkeit, ein formular eindeutig zu kennzeichnen und unterscheiden zu können, ohne dass im browser-quelltext irgendeine id oder sowas erkennbar ist? so dass eine manipulation praktisch unmöglich ist?
danke für eure tipps!
gibt es ne möglichkeit, ein formular eindeutig zu kennzeichnen und unterscheiden zu können, ohne dass im browser-quelltext irgendeine id oder sowas erkennbar ist? so dass eine manipulation praktisch unmöglich ist?
Wie wäre es mit eindeutig zuordenbaren Elementnamen?
Siechfred
Wie wäre es mit eindeutig zuordenbaren Elementnamen?
Siechfred
verstehe nicht ganz was du damit meinst?
inwiefern soll es etwa eindeutig sein, wenn formularfelder bestimmte namen haben? das kann jeder mit einer gefakten post o. get nachfrage manipulieren.
verstehe nicht ganz was du damit meinst?
Formular 1 hat die Elementnamen foo und bar, Formular 2 hat die Elementnamen baz und bumm. Daran ließe sich erkennen, welches Formular versandt wurde.
inwiefern soll es etwa eindeutig sein, wenn formularfelder bestimmte namen haben? das kann jeder mit einer gefakten post o. get nachfrage manipulieren.
Dein Script kennt nur das Schema, was ich beispielhaft genannt habe, andere Kombinationen können damit als unzulässig erkannt werden. Sollten wir allerdings aneinander vorbei reden, beschreibe mal ausführlicher, um was es dir geht.
Siechfred
Hello,
$_SESSION['forms'][$formularbezeichnung][$n]['id'] = $_SERVER['UNIQUE_ID'];
$_SESSION['forms'][$formularbezeichnung][$n]['name'] = $_SERVER['UNIQUE_ID'];
$_SESSION['forms'][$formularbezeichnung][$n]['time'] = timestamp();
echo "<input type="hidden" name="ctrl[forms]" value="".
base64encode(
$_SESSION['forms'][$formularbezeichnung][$n]['name']."-".
$_SESSION['forms'][$formularbezeichnung][$n]['id']
)."" />\n";
Das Eintragen der Sessiondaten lässt Du durch eine Funktion bewerkstelligen, die gleichzeitig das Array $_SESSION['forms'] nach Einträgen durchsucht, deren Zeit abgelaufen ist, und die diese kennzeichnet (Form-ID entfernt) oder beseitigt.
[$formularbezeichnung] ist notwendig, da ein Client sicherlich unterschiedliche
Formulare verwendet
[$formularbezeichnung][$n] ist notwendig, da manche Formulare auch mehrfach geöffnet
werden können.
$_SERVER['UNIQUE_ID'] wird vom Apachen bei jedem Request automatisch generiert.
Die ID muss man auch irgendwie im LOG erreichen können, ich
weiß aber selber leider noch nicht, wie. Das würde dann
die Sache rund machen. In der DB und im Log eintragen...
$_SESSION['forms'][$formularbezeichnung][$n]['name'] ist dafür da, dass Du auch einen
freien Unique Namen nehem kannst. Den kannst Du in der
Struktur stehenlassen, auch wenn das Form abgelaufen ist.
Wenn dann noch ein Request mit diesem Namen kommmt,
hatte der User sich das Form zwar legal beschafft, es
hatte ich aber schon erledigt.
Spielarten gibt es genug...
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Spielarten gibt es genug...
danke für deine idee.
mm. okay. also versuchst du das problem schlicht und einfach durch eine zeitbegrenzung zu erschlagen richtig?
theoretisch könnte man doch auch (zusätzlich) noch über cookies arbeiten anstatt die id über das formular zu übermitteln. wobei dann cookies immer erforderlich wären...
Harzliche Grüße vom Berg
http://www.annerschbarrich.deTom
Hello,
mm. okay. also versuchst du das problem schlicht und einfach durch eine zeitbegrenzung zu erschlagen richtig?
Die Zeitbeschränkung ist in erster Linie dafür da, dass sich nicht zuviel Müll ansammelt in der Session. Zusätzlich zu den Metadaten des Formulars muss man schließlich auch meistens den Buffer für die zu bearbeitenden Daten anlegen. Wie willst Du sonst sauber konkurrierenden Betrieb gewährleisten?
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
hi,
gibt es ne möglichkeit, ein formular eindeutig zu kennzeichnen und unterscheiden zu können, ohne dass im browser-quelltext irgendeine id oder sowas erkennbar ist? so dass eine manipulation praktisch unmöglich ist?
Schon die Annahme, einem Request, den der Server erhält, müsse irgendein HTML-Formular vorausgegangen sein, ist grundfalsch.
gruß,
wahsaga
Hello,
gibt es ne möglichkeit, ein formular eindeutig zu kennzeichnen und unterscheiden zu können, ohne dass im browser-quelltext irgendeine id oder sowas erkennbar ist? so dass eine manipulation praktisch unmöglich ist?
Schon die Annahme, einem Request, den der Server erhält, müsse irgendein HTML-Formular vorausgegangen sein, ist grundfalsch.
Das Ziel ist es aber, das Verfahren möglichst darauf abzustimmen.
Die Idee von Siechfred ist dabei sicher auch wichtig.
Habe ich hier auch schon oft genug beschrieben.
Man merkt sich in dr Session, welche Parameterpaare aus dem Form (oder dem "Fake") zurückkommen _müssen_, welche fehlen dürfen (Checkboxen, Radios, disabled Elements)
Und man merkt sich, wann die Antwort-Vorschrift (also das Form) ausgeliefert wurde und mit welchen Defaults.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom