Mysql: Update ohne inner joins dennoch sicher?
Fabian
- datenbank
0 André Laugks0 Fabian
Hallo Forum!!
Ich habe eine kleine Verständisfrage und wäre für eine Antwort sehr dankbar.
Mein Problem:
Ich habe einen geschützten Bereich für Unternehmen. Diese müssen sich anmelden und damit steht mir die $UID zur Verfügung. Desweiteren habe ich eine Tabelle mit den Spalten Ordner_id, position
und eine Tabelle mit Ordner_id und uid
Wenn das Unternehmen seine Ordnerinformationen abfragt, wird anhand der Tabelle (order_id, uid) verglichen ob er das überhaupt den gewünschten Ordner abfragen darf. Das ist, denke ich, relativ sicher.
$result = mysql_query ("SELECT position 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'");
Wenn ich jedoch die Tabelle updaten möchte, kann ich ja keine joins benutzen. Der User könnte mit meinem Update (s.u.)duch Manipulation z.B. die Ordner_id 23 ändern, obwohl die Tabelle (ordner_id, uid) diese Kombination nicht kennt und daher für falsch erklären müßte.
$query = "UPDATE ordner SET position ='$position'WHERE ordner_id = '$act'";
Gibt es dafür eine bessere Lösung oder ist ein Update generell relativ sicher?
Vielen Dank für dein Interesse und deine Antwort.
Grüße FAbian
Hallo!
Wenn ich jedoch die Tabelle updaten möchte, kann ich ja keine joins benutzen. Der User könnte mit meinem Update (s.u.)duch Manipulation z.B. die Ordner_id 23 ändern, obwohl die Tabelle (ordner_id, uid) diese Kombination nicht kennt und daher für falsch erklären müßte.
Du mußt dafür sorgen, daß der User gar nicht weiss, wie die Variable für die ordner_id lautet. Er kann also nicht die Ordner_id ändern. Du muß/kannst vorher mit einem SELECT oder was auch immer testen, ob die Kombination möglich ist.
Du kannst auch alle Daten, Uid, Ordner_id etc. in einer Session mitschleppen. Der User sieht nur die Session-ID und kann die Variablen nicht manipulieren. Du sorgst mit Deiner Applikation, daß nur die Variablen verwendet werden, die Du für "sicher" hälst.
$query = "UPDATE ordner SET position ='$position'WHERE ordner_id = '$act'";
Gibt es dafür eine bessere Lösung oder ist ein Update generell relativ sicher?
Wenn Du natürlich "wichtige" Variablen über GET oder POST mitschleppst und die dann auch noch ungetestet fürs UPDATE-Statement nimmst, würde ich mal sagen, ist das so ziemlich unsicher.
MfG, André Laugks
Hallo André,
das verstehe ich soweit, danke.
Im meinem Fall habe ich anstatt eines Links ein kleines Symbol. Welches als Submit für ein hidden post Formular dient. Wenn ich mir den html Quelltext anzeigen lasse, steht da natürlich
name:xyz (ordner_id) value 1
Wenn ich diesen Wert in einer Session speichere und statt dessen einen codierten Wert ausgeben möchte, wie führe ich dann die Werte wieder zusammen?
Verstehe ich die Vorgehensweise richtig?
Wenn geklickt auf Code z.B. "hhddd" für Ordner xyz gebe diesen Wert per Get Formular oder Link an die Folgeseite.
Suche in Session nach wo hhddd steht gib den dazugehörigen richtigen Wert an eine Variable zurück, z.B. order_id =1 führe mit diesem Wert eine Abfrage durch. Gucke anschließend wieder in der Session nach welcher Code für order_id=1 gilt und gib dann entsprechend "hhddd" wieder für die Webseite aus.
Oder ist es besser gleich einen Zufallsstring z.B. hhddd in der Tabelle zu speichern und nur diesen bei Abfragen zu verwenden. Das hätte den Vorteil, dass man keine Werte durch manipulation erraten könnte?
Vielen Dank für eine evtl. Antwort.
Grüße Fabian
Hallo André,
das verstehe ich soweit, danke.
Im meinem Fall habe ich anstatt eines Links ein kleines Symbol. Welches als Submit für ein hidden post Formular dient. Wenn ich mir den html Quelltext anzeigen lasse, steht da natürlich
name:xyz (ordner_id) value 1
Nicht so gut!
Wenn ich diesen Wert in einer Session speichere und statt dessen einen codierten Wert ausgeben möchte, wie führe ich dann die Werte wieder zusammen?
Verstehe ich die Vorgehensweise richtig?
Wenn geklickt auf Code z.B. "hhddd" für Ordner xyz gebe diesen Wert per Get Formular oder Link an die Folgeseite.
Suche in Session nach wo hhddd steht gib den dazugehörigen richtigen Wert an eine Variable zurück, z.B. order_id =1 führe mit diesem Wert eine Abfrage durch. Gucke anschließend wieder in der Session nach welcher Code für order_id=1 gilt und gib dann entsprechend "hhddd" wieder für die Webseite aus.
Oder ist es besser gleich einen Zufallsstring z.B. hhddd in der Tabelle zu speichern und nur diesen bei Abfragen zu verwenden. Das hätte den Vorteil, dass man keine Werte durch manipulation erraten könnte?
Nenene, total auf dem Holzweg. Schau Dir dazu mal einen heutigen Beitrag im Forum an.
(PHP) Wert in Session aktualisieren: <?m=25994&t=4617>
Über die Session-ID, die einmailg ist und aus 32 Zeichen besteht, erkennst Du den User immer wieder. In der Session-Datei stehen alle Variablen mit ihren Werten. Du kannst natürlich auch Session-Daten in einer DB ablegen oder wo auch immer.
Die jeweilge Programmiersprache stellt für das ganze Session-Handling Funktionen zur Verfügung.
MfG, André Laugks