dreamcatcher
Goto Top

Ordner schützen bis User freigeschaltet

Hallo,
ich weiß ich habe schon einmal eine ähnliche Frage gestellt, komme aber wieder einmal nicht weiter... entweder Systemblind oder whatever.

1. Ich habe "einen" Benutzer.
2. Dieser Benutzer loggt sich in das System ein.
3. Er hat Zugrff auf "Ordner 2" erworben und klickt auf den Link "Ordner 2".
4. Die verlinkte Seite überprüft den rechtmäßigen Zugriff, ob der Benutzer "Ordner 2" sehen darf.
5. Er darf den Ordner sehen, also wird das Skript aus "Ordner 2" ausgeführt welches eine jeweilige index.html im jeweiligen Subordner per readfile() ausliest und anzeigt.
6. Das Skript (Adobe Presenter / index.html & viewer.swf) wird nun erfolgreich aufgerufen. Die Folien werden angezeigt, alles wunderbar.
(Die Adobe Presenter Daten und Folien auf die die index.html und der viewer.swf aus "Subordner" zugreifen liegen im Ordner "data", welcher nicht geändert werden kann.)

e152684cfe932a4d48cfa7e29b6e2819-schaubild_1

Alles so weit so gut, das System läuft, der Benutzer ist glücklich.... das "böse Skript Kiddi" ebenfalls, der Administrator jedoch nicht.

Warum? Weil man jede Seite / jeden Adobe-Presenter Viewer via URL aufrufen kann.

Zum Beispiel
www.domain.de/ordner 2/sub 2.1/viewer.swf
oder
www.domain.de/ordner 3/sub 3.1/viewer.swf

Der direkte Zugriff auf die Flash-Dateien und somit der unerlaubte Zugriff auf die relevanten Inhalte bleibt bestehen.

... wie bekomme ich nun diese Verzeichnisse vor direktem Zugriff geschützt? Ich habe es bereits mit htaccess versucht. Deny from all schlägt selbstverständlich fehl, da die index.html ja aufgerufen wird die wiederrum die daten aus den Unterordnern braucht. Dieser Zugriff wird ja durch deny from all unterbunden. Eine direkte Weiterleitung wenn die URL eine von den obenen ist auf die Startseite klappt wunderbar, allerdings werden die Inhalte ebenfalls nicht mehr angezeigt wenn man den richtigen Weg über das System geht. Sprich jegliche Arbeit mit htaccess schlug bisher fehl.

Weitere Lösungsansätze wie das temporäre kopieren der Dateien in einen speziellen User-Ordner sind ausgeschlossen da die Dateien mehrere Gigabyte an Umfang annehmen werden.
Ein Lagern der Dateien außerhalb des Doc-Root kommt zur Zeit in der Produktivumgebung nicht in Frage, klappte aber auch in einer Testumgebung nicht...

Ein Arbeiten mit Sessions wäre möglich, fällt mir aber keine Möglichkeit ein zur Zeit.

So long.... hiiiilllfeeeee face-sad
Wie bekomme ich die Ordner geschützt?

Grüße,
Tim

Content-Key: 122662

Url: https://administrator.de/contentid/122662

Printed on: April 27, 2024 at 06:04 o'clock

Member: kugelschreiber
kugelschreiber Aug 13, 2009 at 13:22:46 (UTC)
Goto Top
Hi.

1. Also ich habe keine Ahnung vom Adobe Presenter, daher weiß ich nicht, ob Du eine original Fla Datei vorliegen hast, die Du manipulieren kannst. Denn wenn dies der Fall ist, kannst du es mit Sessions lösen in dem du in Deiner Flashdatei in PHP Script aufrufst, welches die Session Daten prüft und danach enscheidet ob irgendwas passieren soll oder nicht.

2. Anderenfalls, kannst Du Dir mittels eines prepent_files (eine Datei, die vor jedem Request an den Server ausgeführt wird) prüfen, ob der direkte Zugriff auf eine .swf erlaubt wird. Allerdings bin ich mir da nicht ganz sicher. Ist eben nur eine Idee!

Gruß Kuli
Member: DreamCatcher
DreamCatcher Aug 13, 2009 at 13:46:46 (UTC)
Goto Top
Hallo Kuli face-smile

zu 1.) Nein, leider wird die fla Datei nicht mit gespeichert, es gibt auch keine derartige Funktion.

zu 2.) Leider kenne ich "prepent_files" so nicht, auch in google finde ich dazu keinen einzigen Treffer?!
Weiter wüsste ich nicht wie ich das realisieren soll, wenn die .swf direkt aufgerufen wird?!

Grüße,
Tim
Member: kugelschreiber
kugelschreiber Aug 13, 2009 at 14:13:33 (UTC)
Goto Top
1. Dann ist das sicherlich eine Datei die von Adobe generiert wird. Das ist schlecht.
2. Der Eintrag auto_prepend_file steht inder Konfig Deines Webservers ein. Allerdings ist dieser Eintrag im Apache Webserver und ich weiß nicht welchen Du benutzt.
Member: DreamCatcher
DreamCatcher Aug 13, 2009 at 14:39:56 (UTC)
Goto Top
puh sieht kompliziert aus, mal sehen ob man irgendwelche howtos findet.
Danke schon einmal face-smile
Member: ccamel
ccamel Aug 14, 2009 at 14:53:16 (UTC)
Goto Top
Hi

Dein Benutzer loggt sich in das System ein. Ich nehme an du benutzt da Cookies. Gib in diesem Cookie mit in welcher Ordnerstruktur der Benutzer sich bewegen darf. Schreib ein PHP-Script, das dies überprüft und danach den Zugriff zulässt/verwehrt.

Hoffe Du kannst was damit anfangen. Ansonsten erläutere ich es Dir gerne genauer.

Gruss
Ccamel
Member: DreamCatcher
DreamCatcher Aug 15, 2009 at 08:42:16 (UTC)
Goto Top
Hey Ccamel,
Idee an sich ist eine gute, jedoch unterbindet das leider nicht den direkten Zugriff auf die Flash-Dateien, oder?

cookies löschen
url eingeben www.domain.de/ordner/subordner/viewer.swf
anschauen

...oder habe ich da einen Denkfehler?!

Wie macht das eigentlich Rapidshare und Konsorten? Da kommt man ja auch nicht an die Datei?!

Grüße
Member: godlie
godlie Aug 15, 2009 at 16:10:21 (UTC)
Goto Top
Hallo,

hm interessantes Problem.
Was mir hier einfiele wäre ein script welches die richtige datei ausliefert aber das ganze über
eine art "verschleierung".

wie sehe das denn aus wenn du die eigentliche datei per header und readfile() ausgibst?
Member: DreamCatcher
DreamCatcher Aug 16, 2009 at 08:48:05 (UTC)
Goto Top
Hallo,
die eigentliche Datei (index.html & viewer.swf) im Subordner wird per readfile() im System ausgegeben wenn der User eingeloggt und der Inhalt freigeschaltet ist. Problem ist, das der viewer.swf ja die Dateien aus dem Subordner data bezieht... Sobald man irgendwas z.B. mit htaccess friemelt, kann die viewer.swf die Daten aus dem data Ordner nicht mehr lesen....jedenfalls mit den htaccess-Zeuch was ich schon versucht habe...

Ja Interessant schon, aber irgendwie mittlerweile auch nervig ;)

Grüße,
Tim
Member: ccamel
ccamel Aug 17, 2009 at 06:51:07 (UTC)
Goto Top
Hi

Den Denkfehler habe ich gemacht.

Habe was gefunden was dich nicht aufstellen wird:
http://www.phpforum.de/archiv_64051_Verzeichniss@schtzen@ohne@htaccess_ ...

Aber ich möchte ehrlich gesagt nicht glauben, dass es unmöglich ist.

Gruss und viel Glück
Member: DreamCatcher
DreamCatcher Aug 17, 2009 at 06:57:44 (UTC)
Goto Top
Hey,
ein sehr aufbauender Link für einen Montag morgen face-smile

Hm... ich bin die ganze Zeit am überlegen wie z.B. Maxdome das hinbekommen hat... die Streamen ja auch unmengen von Daten ohne das man drankommt ohne zu bezahlen... ansonsten wären ja schon Methoden zum umgehen in diversen Boards zu finden...?!

Grüße und einen guten Start in die Woche..
Tim
Member: godlie
godlie Aug 17, 2009 at 11:13:10 (UTC)
Goto Top
Hallo,

mir wäre da grad was eingefallen.
wie wäre es denn wenn du den zugriff auf diese dateien auf einen "abrufenden" host begrenzt?
Sprich mit einer htaccess nur von eigentlich Server aus zugreifen lässt.

Das müsste eigentlich funktionieren, wenn ein pbp script die Dateieen ausliefert,
alle anderen drüften ja dann ein deny bekommen.

Werd da mal einen Test machen.

grüße

edit
Also ich habs grad versucht und es funktioniert in dieser richtung.
eine htaccess mit folgendem inhalt:

order allow,deny
deny from all
allow from xxx.xxx.xxx.xxx

das ganze in deinen daten ordner rein und fertig apache restart net vergessen
Member: DreamCatcher
DreamCatcher Aug 17, 2009 at 11:21:07 (UTC)
Goto Top
Hallo,
theoretisch ja.. praktisch greift die index.htm / viewer.swf die ja beim User erst angezeigt werden auf die Inhakte aus dem data - Ordner zu. D.h. der Zugriff kommt ja von der Client-Seite. Oder gibt es eine Möglichkeit eine "IP-USERID" Liste zu erstellen. Alle User und deren IPs sind in dieser Liste und nur diese IPs aus der Liste / Datenbank dürfen zugreifen..? Aber wie soll htaccess eine Datenbank-Abfrage machen...?!

lg
Tim
Member: godlie
godlie Aug 17, 2009 at 11:23:53 (UTC)
Goto Top
Ja und worin liegt das Problem, die viewer.swf einfach auf ein php script zugrerifen zu lassen,
welches mit readfile dann die Daten rausrückt?
Dann hast du nämlich den aufruf am Server.
Member: DreamCatcher
DreamCatcher Aug 17, 2009 at 11:28:10 (UTC)
Goto Top
..ich kann die viewer.swf nicht bearbeiten ;)

Das ist ein Adobe-Konstrukt...
Member: godlie
godlie Aug 17, 2009 at 11:33:08 (UTC)
Goto Top
Ja welche url ruft denn die viewer.swf auf?
irgendwas muss sie ja als param aufnehmen oder?

Ich werd nur nicht ganz schlau aus dem konstrukt.
Wie ist das jetzt welche datei beinhaltet schlussendlich die Folien?
Ist das die Viewer.swf? oder greift die nur auf eine weitere
Datei zu welche dann wirklich die Folien beinhaltet?
Member: DreamCatcher
DreamCatcher Aug 17, 2009 at 11:39:14 (UTC)
Goto Top
system > datei.php > index.html > viewer.swf > xxx.swf

Der normale Weg:

Der User greift über das System auf eine Datei.php zu, die nachschaut ob der User die Rechte zum Betrachten hat.
Hat der User die Rechte wird in der Datei die index.html via readfile() eingebunden. Desweiteren sind in der index.html div. kleinerer Scripte zur korrekten Betrachtung der viewer.swf.

Die Viewer.swf ist das Haupt-Konstrukt, die einzelnen Folien und Medieninhalte liegen im data-Ordner.
Member: godlie
godlie Aug 17, 2009 at 11:44:25 (UTC)
Goto Top
Hm was passiert wenn in dem Data Ordner die besagte htaccess anlegst?
Woher weis die viewer.swf welches swf sie öffnen muss?
Member: DreamCatcher
DreamCatcher Aug 17, 2009 at 11:51:21 (UTC)
Goto Top
Dann kann die viewer.swf die Inhalte nicht mehr darstellen wenn die htaccess im data-Ordner liegt.

Beim Erstellen wird automatisch die viewer.swf sowie der data-Ordner erstellt. eine einzelne kompakte-all-in-one-swf erstellen geht leider nicht.
d.h. die viewer.swf weiß von Haus aus das Ihre Inhalte im Ordner data liegen.
Member: godlie
godlie Aug 17, 2009 at 12:08:17 (UTC)
Goto Top
Hm das wird jetzt komliziert.

Es geht im Prinzip darum die Abfragen die der viewer.swf generiert abzufangen und über den server abzurufen.
Ich könnte mir so ein system ca so vorstellen:

system > date.php -> index.html -> viewer.swf -> ganzgenialessicherscript.php -> xxx.swf

Das ganze liese sich aber auch anders realisieren fällt mir grad ein.

Wie wäre es denn wenn du jeden Aufruf auf data /* abfängst durch ein php Script jägst
und schaust ob derjenige das überhaupt darf?
Member: godlie
godlie Aug 17, 2009 at 12:42:48 (UTC)
Goto Top
So ich hab mir jetzt was gebastelt.

im Verzeichnis data leite ich sämtliche anfragen auf swf dateien um.
RewriteEngine On
RewriteRule ^(.*)\.swf$ index.php?g=$1

Dadruch hab ich jetzt die chance über meine php zu prüfen ob diese Datei ausgefliert werden darf.
Ich glaube damit kommst du durch oder?
Member: godlie
godlie Aug 18, 2009 at 12:08:45 (UTC)
Goto Top
Würd mich interessieren obs damit jetzt funktioniert?
Member: DreamCatcher
DreamCatcher Aug 18, 2009 at 13:30:30 (UTC)
Goto Top
Zitat von @godlie:
Würd mich interessieren obs damit jetzt funktioniert?

Hallo,
ich schaff es erst die Tage mich wieder daran zu setzen. Sobald ich was in der Richtung hab sag ich bescheid face-smile

lg
Member: DreamCatcher
DreamCatcher Aug 27, 2009 at 06:43:10 (UTC)
Goto Top
So... hat leider nicht geklappt. Die viewer.swf kann (wenn auch nur eine leere htaccess existiert) nicht mehr auf die daten im Data-Ordner zugreifen...
Member: godlie
godlie Aug 27, 2009 at 07:43:49 (UTC)
Goto Top
Hm.
Jetzt wirds langsam schwierig, ich könnt mir vorstellen einen Wrapper einzusetzen der die viewer.swf wrappt.
Dadruch wäre die Möglichkeit da, durch diesen Wrapper eine Variable mitzuschleifen mit der man die
Berechtigung bestimmen könnte.

Das Problem das hier halt besteht ist jenes, das wie viewer.swf ja wie ein normaler Seitenaufruf gehandhabt wird.
Aber durch das durchschleusen aller Datei arten durch eine php Datei zur Zutrittskontrolle, brauch man hier irgendwas.

Mal überlegen vielleicht fällt mir noch was ein.
Wäre es eig. möglich mal ein paar testdateien zu bekommen?
gruß
Member: DreamCatcher
DreamCatcher Aug 27, 2009 at 09:34:46 (UTC)
Goto Top
Hm,
ich habe mal ein kleines Paket hochgeladen:

www.bo-event.de/test.zip

Die Index.php wird includet in die andere .php im System die den Zugriff überprüft. Ob das jetzt eine index.php oder index.html ist würde an der Stelle keinen Unterschied machen (Standardmäßig ist es eine html).

Grüße,
Tim