Fabian: Variablen durch Session und Zufallsstring per URL weitergeben

Hallo Forumbesucher,

über eine kleine Hilfestellung zu meinem Problem wäre ich Euch sehr dankbar.

Ich habe auf meiner Seite eine Tabelle, die sich automatisch generiert. In dieser sind Links eingebunden, welche der Folgeseite Variablen übergeben.

Z.B. bekommt ein Kunde nur die Lieferungen angezeigt, welche er bestellt hat. klickt er auf den Link, kann er sich die genauen Daten der Lieferung anschauen.

Als erstes habe ich einfach die Variable an die URL angehängt. Mit dem Erfolg, dass jeder, sobald er nur die Variable in der URL ändert, andere Lieferdaten einsehen konnte.

Auch das Format Problem mit einem Hidden Get Formular zur Variablenübergabe habe ich gelöst. Es funktioniert, sollte jedoch nach einhelliger Meinung nicht sehr sicher sein.

Darauf hin habe ich als Vorschlag bekommen:

Ich solle jedem Link einen zufälligen String zuordnen, diesen zusammen mit der eigentlichen Variablen in einer Session speichern und auf der Folgeseite zu dem Zufallsstring wieder die Variable auslesen.

Jedoch bekomme ich die Anweisung einfach nicht hin, die verschiedenen Zufallsstrings zusammen mit den eigentlichen Variablen in der Session zu speichern und anschließend wieder auszulesen.

Irgendwie:

while ($row = mysql_fetch_array($result)){
...
//zufallsstring entwerfen der der session zugeordnet wird für links
srand((double)microtime()*1000000);
$aktion=substr(md5(rand(0,9999999)),0,6);
session_register("s_aktion", "s_order_id");
$s_aktion = $aktion;
$s_ordner_id = $ordner_id;

printf("
<tr valign="top" bgcolor='%s'>
<td bgcolor="#FFFFFF">
<form action="ordnerverwaltung.php" method="post"><input type="hidden" name="aktion" value="$aktion"> <input type="image" src="ordner.jpg" value="submit">
</form></td>

Auf der Folgeseite:

Nimm Variable $aktion, gucke in der Session nach wo $aktion == $ordner_id und gib dann die Variable $ordner_id zurück.

Ist das Verfahren überhaupt sicherer als ein einfaches Hidden Get Formular, dass sich der Aufwand lohnt?

Für Antworten jeglicher Art bin ich sehr dankbar.

Grüße Fabian

  1. Moin,

    Jedoch bekomme ich die Anweisung einfach nicht hin, die verschiedenen Zufallsstrings zusammen mit den eigentlichen Variablen in der Session zu speichern und anschließend wieder auszulesen.

    $s_aktion = $aktion;
    $s_ordner_id = $ordner_id;

    Damit überschreibst du doch die Variablen immer wieder?

    Ich dachte eigentlich an folgendes:

    session_register("meinarray");

    while(datenauslesen) {

    $meinarray["derzufälligestring"]["order_id"]=$order_id;
    $meinarray["derzufälligestring"]["blablubb_id"]=$blablubb_id; // Wenn du noch mehr Daten sichern willst, usw.

    echo "skript.php?aktion=derzufälligestring";  // Wobei sich derzufälligestring von Datensatz zu Datensatz ändern sollte

    Später, nach dem wiederherstellen der Sitzung auf der anderen Seite, kannst du dann über $meinarray[$aktion] aus alles zugreifen, was du vorher gesichert hattest.
    Das ist die allgemeine Methode, mit der man die unterschiedlichsten Sachen erschlagen kann, weil so gut wie alle in so einem Array zu sichern ist.

    Für deinen Fall reicht es aber evt. auch aus, wenn du einfach nur $order_id in einem Array der Session sicherst und dann beim Neuaufruf der Seite überprüfst ob der übergebene Wert im Array ist. (Sicherstellen dass der User das Array nicht manipulieren kann!)

    Und der Königsweg wäre, wenn das alles egal wäre. Der User hat sich doch sicherlich (hoffentlich !) irgendwie authentifiziert um die Tabelle sehen zu können. Aufgrund dieser Authentifizierung hast du doch irgendwie festgestellt welche Bestellungen er sehen darf. Also kannst du auf der Detailseite doch ebenfalls diese Authentifizierung benutzen um festzustellen was er darf und was nicht. Dann kann er solange an den Parametern rumspielen wie er will, er sieht nur die Sachen die er sehen darf.

    --
    Henryk Plötz
    Grüße aus Berlin

    1. Moin Henryk,

      bevor ich mich gleich intensiv mit deiner ausführlichen und sehr gut beschriebenen Lösung beschäftige und dann erstmal einige Zeit grübeln muß,

      möchte ich mich schon einmal ganz herzlich für deine Lösung bedanken.

      Ich denke dass ich das jetzt, mit dem Array, bzw. sogar mit der User Authentifizierung die ich auf der Startseite schon habe, bestimmt hin bekommen werde.

      Danke und Grüße nach Berlin

      Fabian

      1. Moin Henryk,

        Ich habe mich für den Königsweg entschieden...

        Es hat sogar funktioniert!
        $result = mysql_query ("SELECT titel, beschreibung FROM ordner INNER JOIN ordnerid_uid ON (ordner.ordner_id = ordnerid_uid.ordner_id) WHERE ordnerid_uid.uid = '$UID' AND ordnerid_uid.ordner_id = '$ordner_id'");

        Danke nochmals!!!

        Grüße nach und an Berlin

        Fabian