Hallo und guten Morgen!
Ich überlege nun schon ein paar Tage an einem Problem herum bzw. frage mich ob ich in meinem Gedanken mir zu viele Sorgen um die Sicherheit mache (falls das überhaupt möglich sit) und würde mich freuen eure Meinung dazu zu hören.
Es geht um folgendes: Ich habe eine Website mit Online-Shop und Warenkorb-Funktion. Website ist als Frameset realisiert. (das ganze läuft mit MySQL-Datenbank und PHP)
Nun sind mir 2 Dinge wichtig: Nr.1 die "eindeutige" (soweit möglich) Erkennung des Benutzers damit Warenkörbe sich nicht überschneiden etc. Nr. 2 das Nachladen des Framesets (Suchmaschinen-Problem).
Mein Problem ist eigentlich keines wenn ich Session-Cookies verwenden darf, denn dann speicher ich einfach die PHPSESSID und frage auf den Seiten ab ob das Cookie gesetzt ist, wenn nein, wird
1. Das Frameset nachgeladen und
2. Eine PHPSESSID vergeben.
Meine Problem beginnt wenn ich keine Cookies verwenden darf, da der Besucher diese deaktiviert hat.
Dafür habe ich nun eine Tabelle in meiner Datenbank in der ich die SessionID eintrage + Timestamp, die Sessionid gebe ich mit den Links weiter. Steigt nun ein Besucher über irgendeine Seite ein und ist die PHPSESSID nicht drangehängt beim Aufruf einer einzelnen Seite aus meinem Frameset wird nachgeladen + PHPSESSID vergeben. Soweit auch alles klar.
Und nun beginnt mein Problem - wenn nun jemand versucht über irgendeine Seite (ohne das Frameset geladen zu haben) einzusteigen und hängt an diese eine PHPSESSID dran (aus welchen Gründen auch immer, aber ich denke mir, dass so etwas sicherlich vorkommt, habe ich bereits auch in einigen Postings im Forum gelesen), weiß ich nicht was ich mit dem tun soll, wenn es die PHPSESSID gibt.
Grundsätzlich würde er auf dieser Seite bleiben, ist quasi in der Datenbank registriert. Abgesehen davon, dass ich dann das Frameset nicht nachladen kann, habe ich das Problem dass dann zwei mit der gleichen PHPSESSID zugreifen.
Ich hoffe das war halbwegs verständlich wo mein Problem liegt. Es geht mir einfach um folgendes - ein Benutzer ist online und hat nun an jeden Link drangehängt PHPSESSID=xy - geht er z.B. auf die Startseite hat er die $REQUEST_URI ....start.php?PHPSESSID=xy. Was aber nun wenn einer versucht direkt start.php?PHPSESSID=xy in die Adresszeile direkt einzugeben - ich kann ihn dann ja nicht umleiten, da ich ja nur die $REQUEST_URI und nicht den Inhalt der Adresszeile abfragen kann. Ich erkenne also nicht den Unterschied ob der Benutzer nun über das Frameset kommt und "eindeutig" identifiziert bzw. verfolgt werden kann oder sich "reinschmuggeln" will.
So das war die lange Vorgeschichte, nun noch dazu meine Überlegungen wie ich mir denke bzw. gedacht habe das lösen zu können und ein paar Fragen.
Nr 1: Zuerst habe ich in meiner Tabelle in der ich die SIDs eintrage eine Spalte dazugemacht, in der ich einen Eintrag gemacht habe, wenn das Frameset geladen wurde (denn auf der Index wird ihm eigentlich die SID vergeben). Für meinen Fall bringt mir das aber auch nicht viel, denn wenn nun ein Besucher drinnen ist in dem das Nachladen als Ok definiert ist und ein 2. mit der gleichen PHPSESSID einsteigen will, bin ich ja wieder beim gleichen Problem.
Nr. 2: IP-Adresse. Ich habe mir gedacht, zusätzlich zur PHPSESSID die IP-Adresse in der Tabelle zu speichern und abzufragen auf den Seiten ob die PHPSESSID mit der übergebenen und die IP-Adresse mit der IP-Adresse meines Besuchers übereinstimmt. Wenn ja, darf er normal weiter, wenn nein wird er auf die index umgeleitet und bekommt eine neue SID. Dabei gibt es aber auch ein Problem (denke ich zumindest). Ich arbeite z.B. selbst so, dass sich meine Internetverbindung bei kurzer Zeit Leerlauf (ca. 20 sec) abbricht und erst bei Klick auf den nächsten Link wiederherstellt. Da bekomme ich dann aber wieder eine neue IP oder? Und obwohl ich berechtigt die Seite aufgerufen habe, bekomme ich wieder eine neue SID nach meinem System. Stimmt das?
Nr. 3: Sobald der Kunde in den richtigen Bestellvorgang geht, habe ich das Problem nicht mehr in dem Ausmaß, denn dann bekommt er am Beginn z.B. Kundennummer/Passwort und sollte die Verbindung wirklich verloren sein und gespeichert + reale IP nicht mehr übereinstimmen, kann ich ihn ja nach Kundennummer/Passwort fragen.
Nr. 4. Sobald er etwas in den Warenkorb legt, habe ich mir überlegt, könnte ich ja zu meiner Tabelle mit der PHPSESSID die Warenkorbnummer dazuspeichern, da kann ich dann aber nichts abfragen ....
Ihr seht ich bin da ziemlich ratlos und wäre sehr froh über eure Meinung wie man bei einem Online-Shop Kunden die Cookies deaktiviert haben, möglichst sicher durchführen kann.
Über die Möglichkeiten z.B. eine möglichst lange ID zu vergeben weiß ich Bescheid, ist mir auch klar. Trotzdem bleibt für mich ja trotzdem das Problem bestehen, denn auch wenn ich eine ID mit 100 Zeichen vergebe / mitschicke kann theoretisch und praktisch doch der Missbrauch passieren.
Ich würde mich schon über ein Feedback von euch freuen nach dem Motto - Du hast Recht, hier gibt es Probleme oder deine Bedenken sind umsonst, noch mehr natürlich über Anregungen wie das Problem in Griff zu bekommen ist.
Ich weiß, dass zu diesem Thema schon einiges gepostet ist, hier bin ich aber über das was ich eigentlich schon weiß (Cookies am sichersten, SID an die Url dranhängen, SID nicht in Adresszeile etc) nicht hinausgekommen.
Danke im Voraus für Anregungen und Meinungen.
Sabine