Uploads per Flash client -> Session Probleme

Hallo liebe Gemeinde,

ich stoße gerade auf ein extrem verzwicktes Problem mit Flash Clients die in den Shop eingebunden werden. Das Problem ist dass ein Flash Film der eine Anfrage an den Shop sendet eine andere Session zugewiesen bekommt als der User an sich - das ist soweit ja kein Problem, dafür gäbe es ja theoretisch force_sid.

Das Problem das ich jetzt habe ist das ich die sid ja nicht recyceln kann da sich ja der User-Agent ändert, Flash sendet “Adobe Flash Player 10” als HTTP_USER_AGENT über die Leitung. Sobald oxSession jetzt die Methode _checkUserAgent ausführt führt das zu einem neu start der session und einem nicht angemeldetem User (es geht explizit um eingeloggte User).

Ich habe gesehen das in früheren Versionen ein Parameter remoteaccess existiert hat der genau dieses Problem behoben hätte - leider gibt es den nicht mehr, dabei hätte er schon seine Berechtigung gehabt.

Aufgrund von Bug #1097 lässt sich nun auch oxSession nicht überladen, oxConfig ja sowieso nicht. Die einzige Lösung die ich gefunden habe ist extrem unschön und hätte gerne eine bessere Möglichkeit soetwas umzusetzen:

In Datei modules/functions.php


//Fix bug #1097 - this is not a good implementation
$sAgent = $_SERVER['HTTP_USER_AGENT'];

if(stristr($sAgent, "flash player") !== FALSE){
	unset($_SERVER['HTTP_USER_AGENT']);
	$_COOKIE['sid'] = $_POST["force_sid"];
}

Ich schaue quasi auf dem rohen Server Request ob der Agent ein Flash Player ist und wenn ja dann resette ich diesen. Das allein reicht aber noch nicht da der Cookie Check mir anschließend einen weiteren Strich durch die Rechnung macht da der Flash Player bei Uploads keine Cookies mit sendet (und es auch wohl in nächster Zukunft nicht wird). Deswegen muss ich den Cookie faken. Dieser ganze hack gefällt mir überhaupt garnicht - hilfe :confused:

Kleiner Nachtrag, ich habe die Funktion noch etwas erweitert damit das ganze im Admin funktioniert:


//DODGER: bug #1097 - this is not a good implementation
$sAgent = $_SERVER['HTTP_USER_AGENT'];

if(stristr($sAgent, "flash player") !== FALSE){
	unset($_SERVER['HTTP_USER_AGENT']);
	if(isAdmin()){
		$_COOKIE['admin_sid'] = $_POST["force_sid"];
	}else{
		$_COOKIE['sid'] = $_POST["force_admin_sid"];
	}
	
}

So das ganze ist mir natürlich erstmal um die Ohren geflogen (welch Wunder) - ich habe aber trotzdem eine Möglichkeit gefunden, und zwar ist mir aufgefallen das die Datei config.inc.php ja innerhalb des init() von oxConfig inkludiert wird. Da ist dann auch des Rätsels Lösung, ich entferne den userAgent und erzwinge eine session ohne cookies:

In config.inc.php:


    $sAgent = $_SERVER['HTTP_USER_AGENT'];

	if(stristr($sAgent, "flash player") !== FALSE){	
		unset($_SERVER['HTTP_USER_AGENT']);	
		$this->setConfigParam("blSessionUseCookies",false);
	}

Hallo aggrosoft,

danke für den Monolog :slight_smile:

Da ist dann auch des Rätsels Lösung, ich entferne den userAgent und erzwinge eine session ohne cookies:

Fliegt Dir das nicht irgendwo an anderer Stelle um die Ohren?

Gruß

Ich bin doch der Meister der Monologe hier im Forum :slight_smile:

Nein das funktioniert einwandfrei - ich wäre trotzdem total begeistert wenn du mir eine bessere Möglichkeit vorschlägst.

Ansonsten bleibt das so bis der besagte Bug für das überladen der oxsession Klasse gefixt ist. Das Problem ist halt das man über das faken des User Agents nun die session eventuell klauen könnte (sehr theoretisch), ist eine kleine aber doch vorhandene Sicherheitslücke die ich so nicht lassen möchte.

Warum ist der remoteaccess parameter eigentlich rausgeflogen? Bin ich der einzige Depp der freiwillig flash an den shop anbindet :slight_smile: ? Das ist ein großes Problem, zumindest bei uploads über flash da diese keine Cookies mitsenden.

Also Grundfrage ist - wie “verleihe” ich eine Session an einen anderen User Agent? Es geht wirklich nur um den Agent, nicht um eine ip oder sonst was - könnte man nicht flash als user agent zur Ausnahme machen?

Um den Monolog fort zu führen, ich habe das ganze jetzt als Bug eingeschickt ->

https://bugs.oxid-esales.com/view.php?id=1679

Ich bin der Meinung es sollte eine ordentliche, dafür vorgesehene, Schnittstelle geben die ein Session sharing möglich macht.

Hallo aggrosoft,

ich kann mir nicht vorstellen, dass RC kommentar- und ersatzlos gestrichen wurde. Es gibt mit Sicherheit einen anderen Weg, siehe z.B. woonio.de, den ich leider nicht kenne. Aber schauen wir, was auf den Bug geantwortet wird. Für’s nächste Mal wäre vielleicht auch die Mailingliste eine gute Alternative für solche Anfragen: http://www.oxidforge.org/wiki/Mailinglists

Gruß

Naja ersatzlos ist wohl der falsche Ausdruck, in der neuen Version wird die ganze Sache einfach anders angegangen - was den remoteaccess parameter sinnlos macht. Dieser Parameter war ja auch nicht gedacht um mein Problem zu lösen, sondern für etwas anderes. Ich kenne ja generell auch eine Möglichkeit - nur dafür muss der Flash Film angepasst werden, was nicht immer möglich oder sinnvoll ist. Machen es ja bei Shirtnetwork auch so, nur in diesem einen leidigen Fall ist der Flash Teil für mich geschlossener code.

Trifft man die Core Entwickler auf dieser Mailing Liste an?

[QUOTE=Marco Steinhaeuser;26328]Für’s nächste Mal wäre vielleicht auch die Mailingliste eine gute Alternative für solche Anfragen: http://www.oxidforge.org/wiki/Mailinglists
[/QUOTE]

Und sobalds dort interessant wird verziehen sich alle ins Partnerforum und das wars dann für Shopbetreiber die selbst entwickeln. Daher passt das hier im Forum deutlich besser!

Hi,

Trifft man die Core Entwickler auf dieser Mailing Liste an?

Ja.

Und sobalds dort interessant wird verziehen sich alle ins Partnerforum und das wars dann für Shopbetreiber die selbst entwickeln.

Dieser eine Fall hat mir genau aus dem angesprochenen Grund auch nicht gefallen und ich hab versucht, das zu klären. Im Partnerforum darf es nicht um Entwicklungsdinge gehen.

Gruß

Ich kann auch versichern das das nur einmal vorkam. Auf der Mailingliste ist allerdings auch nicht soooo viel los.