Moin liebe CB gemeinde,
wieder würde ich gerne eure meinung zu einem problem und meinen ideen dazu hören
wie einige sicher mtibekommen haben arbeite ich an einer projektverwaltungs software und der versuche ich nun beizubringen die eingaben anderer user direkt auf dem bildschirm anzuzeigen.
Ich habe das nun mit einem NodeJS server und SSE gelöst.
Ein user betritt also die seite, denn wird eine EventSource geöffnet (der nodejs server) und der schickt, sobald er von einem anderen user die meldung einer änderung erhält, an alle clienten diese änderung und das clientseitige JavaScript baut es ein.
das klappt alles wunderbar (nochmal danke an die helfer hier
), doch natürlich darf nicht einfach jeder diese daten geschickt bekommen. Es werden zwar (noch) keine sicherheitsrelevatnten daten verschickt, aber ich möchte trotzdem sicher gehen das nur eingeloggte user die daten bekommen.
ich habe mir mal angeschaut was JS an den NodeJs server sendet, er schickt dort immer die PHPSESSIONID mit, damit könnte ich ihn also theoretisch identifizieren.
Ich habe mir das so überlegt:
Ein user loggt sich ein, dann sendet php an den NodeJs server die sessionid und ab dann weiß er das ein client berehctigt ist daten zu empfangen.
Problem: man könnte die session einfach übernehmen.
dann war meine zwiete überlegung die sessionid an eine IP zu koppeln, doch da stellt sich mir ein problem in den weg, diese verdammte same origin policy!
Damit die EventSource auf meinen NodeJS server zugreifen kann (der auf port 8765 lauscht) muss ich die verbindung durch einen proxy jagen, das geschieht hier in form des moduls mod_proxy von apache.
Ich habe einfach eine .htaccess datei erstellt die alle anfragen an /see/ auf port 8765 weiterleitet.
So denkt JavaScript alles spelt sich auf dem selben host+port ab.
die htaccess
durch dieses weiterleiten wird die remoteip der request, die am nodejs server eingehen, aber automatisch zur ip des servers (also quasi localhost).
So kann ich die session dann nicht mehr mit einer IP abgleichen.
Alternativ würde es wohl auch reichen, bei einem verbundungsaufbau einmal die daten mitzuschicken, denn eigentlich sollte die verbindung ja stets aufrecht bleiben, zumal ich in meinen Events, die der nodejs server erzeugt, im header immer ein keep-alive mitschicke.
Reicht das?
Was könnte man sonst machen?
Könnte ich in der htaccess datei dafür sorgen, das die richtige remote IP mitgeschickt wird?
Oder bin ich ganz und gar auf dem Holzweg? Für denk anstöße und diskussionen wäre ich dankbar
edit:
jajajajajajajaaaaaaaaaaaaaa wieder zu schnell.
Man kommt doch an die richtige IP adresse, im reuqest.header gibt es den eintrag x-forwarded-for, mit der richtigen remoteip.
Dennoch meine frage ob es überhaupt sinnvoll ist
reicht es evtl. schon nur auf die ip zu pürfen? wenn die verbindung abreist kann man diese ja wieder löschen?
oder sehe ich das ein wenig zu einfach?
wieder würde ich gerne eure meinung zu einem problem und meinen ideen dazu hören
wie einige sicher mtibekommen haben arbeite ich an einer projektverwaltungs software und der versuche ich nun beizubringen die eingaben anderer user direkt auf dem bildschirm anzuzeigen.
Ich habe das nun mit einem NodeJS server und SSE gelöst.
Ein user betritt also die seite, denn wird eine EventSource geöffnet (der nodejs server) und der schickt, sobald er von einem anderen user die meldung einer änderung erhält, an alle clienten diese änderung und das clientseitige JavaScript baut es ein.
das klappt alles wunderbar (nochmal danke an die helfer hier
ich habe mir mal angeschaut was JS an den NodeJs server sendet, er schickt dort immer die PHPSESSIONID mit, damit könnte ich ihn also theoretisch identifizieren.
Ich habe mir das so überlegt:
Ein user loggt sich ein, dann sendet php an den NodeJs server die sessionid und ab dann weiß er das ein client berehctigt ist daten zu empfangen.
Problem: man könnte die session einfach übernehmen.
dann war meine zwiete überlegung die sessionid an eine IP zu koppeln, doch da stellt sich mir ein problem in den weg, diese verdammte same origin policy!
Damit die EventSource auf meinen NodeJS server zugreifen kann (der auf port 8765 lauscht) muss ich die verbindung durch einen proxy jagen, das geschieht hier in form des moduls mod_proxy von apache.
Ich habe einfach eine .htaccess datei erstellt die alle anfragen an /see/ auf port 8765 weiterleitet.
So denkt JavaScript alles spelt sich auf dem selben host+port ab.
die htaccess
Code:
RewriteRule ^(sse)/$ https://xxx.de:8765/ [P]
durch dieses weiterleiten wird die remoteip der request, die am nodejs server eingehen, aber automatisch zur ip des servers (also quasi localhost).
So kann ich die session dann nicht mehr mit einer IP abgleichen.
Alternativ würde es wohl auch reichen, bei einem verbundungsaufbau einmal die daten mitzuschicken, denn eigentlich sollte die verbindung ja stets aufrecht bleiben, zumal ich in meinen Events, die der nodejs server erzeugt, im header immer ein keep-alive mitschicke.
Reicht das?
Was könnte man sonst machen?
Könnte ich in der htaccess datei dafür sorgen, das die richtige remote IP mitgeschickt wird?
Oder bin ich ganz und gar auf dem Holzweg? Für denk anstöße und diskussionen wäre ich dankbar
edit:
jajajajajajajaaaaaaaaaaaaaa wieder zu schnell.
Man kommt doch an die richtige IP adresse, im reuqest.header gibt es den eintrag x-forwarded-for, mit der richtigen remoteip.
Dennoch meine frage ob es überhaupt sinnvoll ist
reicht es evtl. schon nur auf die ip zu pürfen? wenn die verbindung abreist kann man diese ja wieder löschen?
oder sehe ich das ein wenig zu einfach?
Zuletzt bearbeitet: