sicherheit beim öffnen eines fensters
sam
- php
hallo zusammen
umgebung:
ich habe auf der domain www.foo.com einen passwortgeschützten admin bereich. das ganze ist mit php programmiert.
problem:
ich möchte aus diesem adminbereich auf der url www.foo.com ein fenster auf einem anderen server (z.b. www.xyz.com) öffnen, mit einem dateibrowser, der die dateien auf diesem server (www.xyz.com) anzeigt. ich möchte aber auf jedenfall verhindern, dass man einfach via url www.xyz.com/dateibrowser.php auf den dateibrowser kommt. ich habe auch zugriff von www.foo.com auf die mysql db von www.xyz.com.
wie kann ich das möglichst sicher machen, dass keine unerwünschten zugriffe auf diesen dateibrowser via url geschehen?
kann man überprüfen von wo ein dokument geöffnet wird?
danke für eure hilfe
greeeeez sam
hi,
wie kann ich das möglichst sicher machen, dass keine unerwünschten zugriffe auf diesen dateibrowser via url geschehen?
HTTP Auth wäre mein Vorschlag.
kann man überprüfen von wo ein dokument geöffnet wird?
Zuverlässig: Nein.
gruß,
wahsaga
hi
HTTP Auth ist in diesem fall eher die notlösung obwohl es wahrscheinlich das sicherste wäre.
gibt es nicht eine möglichkeit z.b. mit remote adress und timestamp einen eintrag in die mysql db zu machen und diese dann vom neu geöffneten fenster wieder abzurufen, wobei bei timestamp das problem dann sein könnte, dass auf dem anderen server die uhr anders gestellt ist.
oder könnte man von www.xyz.com schauen ob der benutzer auf www.foo.com eingeloggt ist.
greeez sam
hi,
gibt es nicht eine möglichkeit z.b. mit remote adress und timestamp einen eintrag in die mysql db zu machen und diese dann vom neu geöffneten fenster wieder abzurufen,
Das musst du doch wohl am besten wissen, ob du diese Möglichkeit hast.
wobei bei timestamp das problem dann sein könnte, dass auf dem anderen server die uhr anders gestellt ist.
Ja, könnte ein Problem darstellen.
oder könnte man von www.xyz.com schauen ob der benutzer auf www.foo.com eingeloggt ist.
Musst du auch selber wissen, ob solche Domain- und ggf. auch Server-übergreifenden Zugriffe bei deiner Konstellation möglich sind.
gruß,
wahsaga
hi
also die möglichkeit einträge in der db auf www.xyz.com zu machen existiert aber dann kommt eben das zeitproblem... könnte man die zeit von irgendwo anders beziehen?
oder könnte man von www.xyz.com schauen ob der benutzer auf >>www.foo.com eingeloggt ist.
Musst du auch selber wissen, ob solche Domain- und ggf. auch >>Server-übergreifenden Zugriffe bei deiner Konstellation möglich sind.
wie könnte sowas dann aussehen vom ablauf her?
gruss sam
hi,
also die möglichkeit einträge in der db auf www.xyz.com zu machen existiert aber dann kommt eben das zeitproblem... könnte man die zeit von irgendwo anders beziehen?
Möglich ... Timeserver sollten im www verfügbar sein, da kann ja z.B. auch WinXP automatisch seine Uhrzeit von beziehen.
gruß,
wahsaga
hi
gibts sonst irgend eine idee oder lösungsansatz? bin sicher nicht der erste der vor diesem problem steht...
thx
greeeez sam
Hi sam,
also die möglichkeit einträge in der db auf www.xyz.com zu machen existiert aber dann kommt eben das zeitproblem... könnte man die zeit von irgendwo anders beziehen?
Mach es doch so, wie du es bereits angedacht hast:
Theoretisch wäre es dann zwar möglich, diesen Schutzmechanismus zu umgehen - aber die Wahrscheinlichkeit, dass man die Zeichenkette mit 30 Zeichen errät (und das auch noch innerhalb der Zeit, wo die existiert) ist schon verdammt gering, wenn bei dir nicht mehrere Millionen User gleichzeitig online sind.
Was du dir aber noch überlegen müsstest, wäre eine Art „Garbage Collection“ - d.h. du musst dafür sorgen, dass aus der Tabelle users_online auch die alten Einträge rausfliegen. Dazu gehört zuerst mal, dass dein Script logout.php den Eintrag löscht. Was aber wenn der User nicht brav den Logout Button klickt? Für den Fall musst du dir noch überlegen, wie du die zu löschenden Einträge findest. Dazu speicherst du am besten noch einen Timestamp mit in den Eintrag und lässt dann regelmäßig (Stichwort: CronJobs) ein Script laufen, was alle Einträge mit zu alten Timestamps rausschmeißt.
MfG, Dennis.
Hello,
Du könntest von dem Server, an dem sich der User "angemeldet" hat, ein Zertifikat (sowas wie eine Session-ID) über eine gesicherte Verbindung an den anderen Server senden und dieses Zertifikat im Form als hidden-field mit ausgeben.
Wenn der User nun mit dem Form einen Post auf den zweiten Server ausführt, wird das Zertifikat auf dem zweiten Server erkannt und kann gegen einen ordentlichen Cookie ausgetauscht werden, der fortan den User auch auf dem zweiten Server identifiziert.
Die beiden Server könnten entweder über SSL und/oder mittels proprietärer Verschlüsselung der Daten und TAN-Liste oder ähnlicher Verfahren miteinander kommunizieren.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom

Moin!
ich möchte aber auf jedenfall verhindern, dass man einfach via url www.xyz.com/dateibrowser.php auf den dateibrowser kommt.
Dann muß der Server xyz in jedem Fall jeden Zugriff authentifizieren, d.h. gegen eine Liste der erlaubten Kriterien abgleichen und nur im Erfolgsfall Zugriff geben.
Kriterien sind (alternativ oder kumulativ):
Erläuterungen:
HTTP-Authentifizierung funktioniert nicht ohne erneute Eingabe des Passwortes, dafür aber vollkommen unabhängig vom Login auf foo.
Die IP des Clients dürfte nur nutzbar sein, wenn der Client foo ist, welcher als Proxy agiert. In PHP gegossen dürfte das recht aufwendig werden, insbesondere wenn es ein Dateibrowser sein soll.
Der Referrer ist als unzuverlässig anzusehen und fällt deshalb aus.
ich habe auch zugriff von www.foo.com auf die mysql db von www.xyz.com.
Du könntest also den Client auf foo mit einer Session-ID ausstatten, die Gültigkeit dieser ID dann auf xyz speichern und den Client dann mit URL-Parameter von foo auf xyz weiterleiten.
kann man überprüfen von wo ein dokument geöffnet wird?
Die IP des zugreifenden Browsers wäre ein Kriterium - bei dynamischer IP-Vergabe allerdings eines, das dir nicht weiterhilft.
- Sven Rautenberg