PHP Session - ich bekomm es einfach nicht hin...

anony

Neu angemeldet
Registriert
30 Nov. 2014
Beiträge
47
Hi,

sorry, ich wieder. Habe mich bereits durch diverse Foren und Seiten wie PHP.NET usw gewälzt aber irgendwie bekomme ich das nicht zum laufen :dozey: :m

Wenn ich einen Bild-Upload per Formular realisiere, wie verhindere ich es, dass das Bild mit F5 erneut hochgeladen wird?

Im Formular habe ich bereits ein hidden Feld mit einem Zufallswert, erzeugt aus uniqid(); (wenn mir jemand sagen kann, wie ich mit einer einzelnen PHP-Funktion einen längeren/sichereren Zufallswert erzeuge, gerne! - vielleicht md5($uniqid)?).

Das Formular.php und das Uploadscript.php sind beide in eine Seite includet, heißt, sie Session habe ich nicht mit session_start(); sondern mit einem PHP.INI-Eintrag (session.auto_start = On) realisiert.

Danke für eure Geduld und die Antworten schon mal! :D
 
Hey anony,

es wäre gut, deinen Code zu kennen, um dir direkt sagen zu können, wo das Problem liegt.

Ansonsten kann ich dir nur allgemeine Tipps geben:
- einen längeren Zufallswert kannst du mit uniqid('', true) erzeugen, dieser ist dann statt 13 Zeichen insgesamt 23 Zeichen lang
- md5 bildet dir einen Hashwert, da aber die Anzahl der möglichen von uniqid() erzeugten Strings unverändert bleibt, gibt es auch nur maximal so viele einzigartige Rückgabewerte, wie es einzigartige Eingabewerte gibt (maximal, da md5 eine Hashfunktion ist und theoretisch Kollisionen möglich sind, d.h. zwei verschiedene Eingabeparameter ergeben denselben Rückgabewert).
- Grundsätzlich sieht der Schutz vor doppeltem Absenden so aus: Beim Aufruf des Formulars wird der Zufallswert generiert, in die Session und in ein verstecktes Feld des Formulars geschrieben. Wenn das Formular abgesendet wurde, wird geprüft, ob der Wert aus der Session mit dem der Formularübermittlung übereinstimmt und wenn ja, dann wird der Wert in der Session wieder zurückgesetzt, z.B. auf einen leeren String. Bei erneuter Formularübermittlung würde dann die Überprüfung, ob Sessionwert und Formularwert übereinstimmen, fehlschlagen.
- Mit dieser Methode verhinderst du nicht nur doppelte Bilduploads, sondern das Prinzip findet im Allgemeinen zur Abwehr von statt.
 
  • Thread Starter Thread Starter
  • #3
Aktueller Stand ist folgender:
Formular.php:
[src=php]<?php
session_start();
$uniqid = uniqid('', true);
$_SESSION["einmalkey"] = $uniqid;
?>


...
[/src]

--
Uploadscript.php:
Hier habe ich inzwischen nichts mehr ^^
 
Ich werfe einfach mal "CSRF Token" in den Raum.
Hier kannst du mehr darüber erfahren:

(Kenne die Quelle nicht, war mitunter das erste Ergebnis bei Google)
 
Hallo anony,

kannst du mit meinen Ansätzen etwas anfangen? Wenn nein, woran scheitert es? Der von keksautomat verlinkte Artikel zeigt dir, wie die von mir beschriebene Vorgehensweise in programmierter Form aussehen könnte.
 
Hallo anony,

ich möchte kurz eine Aussage von mir korrigieren:
Wenn das Formular abgesendet wurde, wird geprüft, ob der Wert aus der Session mit dem der Formularübermittlung übereinstimmt und wenn ja, dann wird der Wert in der Session wieder zurückgesetzt, z.B. auf einen leeren String.

Das Zurücksetzen auf einen leeren String wäre sicherheitstechnisch problematisch, da nach einer erfolgreichen Formularübermittlung ein CSRF-Angriff möglich ist, bspw. indem ein Angreifer das Feld für das CSRF-Token auf einen leeren String setzt. Besser wäre es, ein neues, zufälliges Token zu berechnen.
 
Das ist kein funktionierender Schutz gegen doppelte Uploads, da auch der POST-Wert 'submit' erneut übertragen wird.
 
  • Thread Starter Thread Starter
  • #9
CSRF Token war das Stichwort, danke euch! :)
 
Zurück
Oben