Frage an die PHP-Experten...

Multimedia pur!
Antworten
Benutzeravatar
elevar
Logik-Lord
Logik-Lord
Beiträge: 1411
Registriert: 08.08.2007, 20:04

Re: Frage an die PHP-Experten...

Beitrag von elevar »

Probier mal das:

Code: Alles auswählen

  RewriteEngine on
  RewriteRule   ^alben/([\w /]+\.(jpg|gif|png))$  ../system/bildload.php?bild=../alben/$1
Well, it all started on Scabb Island. Some of my admiring fans had pressured me into telling my LeChuck evaporating story once again...
Beowulf

Re: Frage an die PHP-Experten...

Beitrag von Beowulf »

Aber das klappt irgendwie nicht.
Was genau klappt denn nicht? Elevars Vorschlag wird wohl keine Besserung bringen, denn er sieht in meinen Augen falsch aus.
Hier kann man Reguläre Ausdrücke testen: http://www.fileformat.info/tool/regex.htm
Mein Code gibt für "album/bild1.jpg" denn Wert "bild1.jpg" in der Variable $1 zurück.

Es wäre daher sinnvoll, mal die Adresse eines Bildes zu testen, indem man sie in der Adressleiste des Browsers eingibt. Vielleicht werden ja PHP-Fehlermeldungen angezeigt.
Vielleicht sollte ich noch darauf hinweisen, dass ich in dem geschützen Ordner noch Unterordner habe und da die eigentlichen Bilder drinliegen. Aber wenn ich die Zeile richtig interpretiere müsste das doch trotzdem klappen, oder
Nun, dein Script sollte schon genau wissen wo die Datei liegt. Auch sollte der User mit seinen momentanen htaccess-Zugriffsrechten auf das Script zugreifen können.
Benutzeravatar
Fightmeyer
Riesiger Roboteraffe
Riesiger Roboteraffe
Beiträge: 7309
Registriert: 16.12.2004, 22:51
Wohnort: Potsdam
Kontaktdaten:

Re: Frage an die PHP-Experten...

Beitrag von Fightmeyer »

Die htaccess zugriffsrecht sind i.O.

Aber der Ausdruck ist noch nicht i.O.

Ich hab es gerade mal getestet und kein "Match" gekriegt. Dann kann es natürlich nicht funzen.

Mein Beispiellink sah so aus:

../alben/9/thumbs/th_0000003.jpg

oder

../alben/9/0000003.jpg

Wobei der Name des Unterordners oder der Datei natürlich variieren kann.

Im Grunde soll nur aus dem hier:

../alben/9/thumbs/th_0000003.jpg

das gemacht werden:

../system/bildload.php?bild=../alben/9/thumbs/th_0000003.jpg

Also sobald "alben" im Link auftaucht und es sich um eine Dateendung von bestimmten Typen handelt, soll einach ../system/bildload.php?bild= vorangestellt werden.

EDIT: Hab jetzt auch nochmal die Prüfung hier probiert:
^/(alben)/*\.((jpg)|(gif)|(png))$

Aber das klappt auch nicht. Ich schnall diese regulären Ausdrücke einfach nicht. Wozu ist das W oben eigentlich gut?
Beowulf

Re: Frage an die PHP-Experten...

Beitrag von Beowulf »

Verstehe. Wenn es Unterordner gibt, musst du den Ausdruck natürlich anpassen:

Code: Alles auswählen

RewriteEngine on
  RewriteRule   ^alben/((\w+/)*\w+\.(jpg|gif|png))$  ../system/bildload.php?bild=../alben/$1
Durch das Voranstellen des Ausdrucks (\w+/)* können eventuelle Unterverzeichnisse abgebildet werden.
Wozu ist das W oben eigentlich gut?
Das w mit Backslash steht für alle "Wörterzeichen", man schreibt also \w als Abkürzung. Je nach Servereinstellung kann diese Buchstabenklasse was anderes bedeuten, aber typischerweise ist sie so definiert: \w = [a-zA-Z0-9_]
Also alles, was so für Verzeichnisnamen üblicherweise erlaubt ist.
Benutzeravatar
Fightmeyer
Riesiger Roboteraffe
Riesiger Roboteraffe
Beiträge: 7309
Registriert: 16.12.2004, 22:51
Wohnort: Potsdam
Kontaktdaten:

Re: Frage an die PHP-Experten...

Beitrag von Fightmeyer »

Klappt laut diesem Onlinetest auch nicht. Kein match.
Benutzeravatar
elevar
Logik-Lord
Logik-Lord
Beiträge: 1411
Registriert: 08.08.2007, 20:04

Re: Frage an die PHP-Experten...

Beitrag von elevar »

Probier mal das:

Code: Alles auswählen

  RewriteEngine on
  RewriteRule   ^\.\./alben/([\w /]+\.(jpg|gif|png))$  ../system/bildload.php?bild=../alben/$1
Well, it all started on Scabb Island. Some of my admiring fans had pressured me into telling my LeChuck evaporating story once again...
Benutzeravatar
Fightmeyer
Riesiger Roboteraffe
Riesiger Roboteraffe
Beiträge: 7309
Registriert: 16.12.2004, 22:51
Wohnort: Potsdam
Kontaktdaten:

Re: Frage an die PHP-Experten...

Beitrag von Fightmeyer »

also der Ausdruck scheint jetzt korrekt zu sein. JEdenfalls klappt der Test auf dem Onlinetest.
Kriegt man irgendwie raus, ob der Server dieses Modul überhaupt installiert hat?

EDIT: Also das Modul scheint installiert zu sein. Ich habe die rewriteengine bereits in ner anderen htaccess eingebaut gehabt.
Beowulf

Re: Frage an die PHP-Experten...

Beitrag von Beowulf »

Fightmeyer hat geschrieben:Klappt laut diesem Onlinetest auch nicht. Kein match.
Doch, tut es. Du wirst dich wohl vertippt haben:
Bild
php1.png
Elevars Vorschlag ist immer noch falsch! Bei ihm führen auch Strings wie "alben// ///test////bild1.jpg" zum Match.

Wie wärs, wenn du uns einfach mal einen Link zur Homepage gibst? Wir stochern hier alle irgendwie im Dunkeln rum. Wir wissen ja noch nicht einmal, welche Fehlermeldungen auf deinem Bildschirm auftauchen.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Benutzeravatar
Fightmeyer
Riesiger Roboteraffe
Riesiger Roboteraffe
Beiträge: 7309
Registriert: 16.12.2004, 22:51
Wohnort: Potsdam
Kontaktdaten:

Re: Frage an die PHP-Experten...

Beitrag von Fightmeyer »

Du hast recht. Bei Dir hat es auch geklappt. ALlerdings nur, wenn der Link keine führenden ../ hat.

Aber in der Form nützt mir das nichts. Ich dachte, das funktioniert nach dem Prinzip, dass einfach jeglicher String aus dem Quelltext geprüft wird, oder?

Aber der HTML-Code sieht ja eher so aus:

<img src="/../alben/bla/blub.jpg">Alternativtext</img> und dann noch irgendwas

Ist denn überhaupt gewährleistet, dass das auch umgewandelt wird? Wenn man beispielsweise mal so einen String zur Prüfung eingibt, klappt es nämlich nicht mehr. Aber es steht ja im Quelltext definiitv immer noch was davor und was danach.
Benutzeravatar
elevar
Logik-Lord
Logik-Lord
Beiträge: 1411
Registriert: 08.08.2007, 20:04

Re: Frage an die PHP-Experten...

Beitrag von elevar »

Beowulf hat geschrieben:Elevars Vorschlag ist immer noch falsch! Bei ihm führen auch Strings wie "alben// ///test////bild1.jpg" zum Match.
Das ist mir klar, ich sehe darin aber kein Problem. Ich lass dich dann aber mal in deiner Rechthaberei alleine.
Well, it all started on Scabb Island. Some of my admiring fans had pressured me into telling my LeChuck evaporating story once again...
Beowulf

Re: Frage an die PHP-Experten...

Beitrag von Beowulf »

Fightmeyer hat geschrieben:Du hast recht. Bei Dir hat es auch geklappt. ALlerdings nur, wenn der Link keine führenden ../ hat.
Fightmeyer hat geschrieben:Aber der HTML-Code sieht ja eher so aus:<img src="/../alben/bla/blub.jpg">Alternativtext</img> und dann noch irgendwas
Dies verstehe ich nicht. Wozu dieses ../ ? Du führst ständig neue Variationen ein, und wunderst dich, dass es nicht klappt! ;) Wenn dieses ../ bei allen Links der Fall ist, sehe ich kein Problem darin, im Regulären Ausdruck vor dem alben ein \.\./ zu schreiben.
Fightmeyer hat geschrieben:Ich dachte, das funktioniert nach dem Prinzip, dass einfach jeglicher String aus dem Quelltext geprüft wird, oder?
Nein, ganz falsch. Es werden lediglich Dateianfragen geprüft, kein Quelltext. Jedes mal, wenn dein Browser vom Server eine Datei anfordert, wird die RewriteRule des entsprechenden Verzeichnisses überprüft, und dann bei einem Match die Anfrage auf eine andere Datei umgeleitet. Daher ist es wichtig, diese RewriteRule sicher zu machen, damit kein Hacker auf Dateien zugreifen kann, auf die er nicht zugreifen darf.
elevar hat geschrieben:Ich lass dich dann aber mal in deiner Rechthaberei alleine.
Gerne. Du scheinst sowieso immer ein Problem damit zu haben, wenn andere Recht haben.
Benutzeravatar
Fightmeyer
Riesiger Roboteraffe
Riesiger Roboteraffe
Beiträge: 7309
Registriert: 16.12.2004, 22:51
Wohnort: Potsdam
Kontaktdaten:

Re: Frage an die PHP-Experten...

Beitrag von Fightmeyer »

Beowulf hat geschrieben:
Fightmeyer hat geschrieben:Du hast recht. Bei Dir hat es auch geklappt. ALlerdings nur, wenn der Link keine führenden ../ hat.
Fightmeyer hat geschrieben:Aber der HTML-Code sieht ja eher so aus:<img src="/../alben/bla/blub.jpg">Alternativtext</img> und dann noch irgendwas
Dies verstehe ich nicht. Wozu dieses ../ ? Du führst ständig neue Variationen ein, und wunderst dich, dass es nicht klappt! ;) Wenn dieses ../ bei allen Links der Fall ist, sehe ich kein Problem darin, im Regulären Ausdruck vor dem alben ein \.\./ zu schreiben.
Klasse. Das war es. Jetzt haut es hin.
Ich habe nun versucht, in der htaccess noch alle Direktzugriffe auf das Verzeichnis zu unterbinden.

so hier:

Code: Alles auswählen

order deny,allow 
deny from all
allow from localhost
Ich weiß nicht, ob die letzte Zeile erforderlich ist, oder der Server ohnehin immer auf das Verzeichnis zugreifen kann. Auf jeden Fall klappt es dann nicht mehr.
Wie müssten die Berechtigungen gesetzt werden?
Beowulf

Re: Frage an die PHP-Experten...

Beitrag von Beowulf »

Das "allow from localhost" kannst du dir sparen, da die Zugriffssteuerung per htaccess nicht für die Dateiverwaltung von PHP-Scripten greift. Du kannst also mit "deny from all" ein Unterverzeichnis schützen, aber das Script vom übergeordneten Verzeichnis kann trotzdem darauf zugreifen. Einzige Voraussetzung ist, dass das Script selber in einem Verzeichnis liegt, auf das der User zugreifen darf.
Fightmeyer hat geschrieben:Wie müssten die Berechtigungen gesetzt werden?
Was meinst du damit genau? Wolltest du die Zugriffsrechte nicht per PHP steuern?
Benutzeravatar
Fightmeyer
Riesiger Roboteraffe
Riesiger Roboteraffe
Beiträge: 7309
Registriert: 16.12.2004, 22:51
Wohnort: Potsdam
Kontaktdaten:

Re: Frage an die PHP-Experten...

Beitrag von Fightmeyer »

Beowulf hat geschrieben:Das "allow from localhost" kannst du dir sparen, da die Zugriffssteuerung per htaccess nicht für die Dateiverwaltung von PHP-Scripten greift. Du kannst also mit "deny from all" ein Unterverzeichnis schützen, aber das Script vom übergeordneten Verzeichnis kann trotzdem darauf zugreifen. Einzige Voraussetzung ist, dass das Script selber in einem Verzeichnis liegt, auf das der User zugreifen darf.
Das ist gewährleistet. Trotzdem klappt es nicht mehr, sobald ich das so einstelle.
Beowulf hat geschrieben:
Fightmeyer hat geschrieben:Wie müssten die Berechtigungen gesetzt werden?
Was meinst du damit genau? Wolltest du die Zugriffsrechte nicht per PHP steuern?
Ich meinte damit die Einstellungen in der htaccess. Die REchte per PHP richte ich erst danach ein, wenn das GRundgerüst steht.
Momentan kommt der User noch problemlos an das Script ran. Es klappt ja auch, so lange dieses "deny from all" noch nicht in der htaccess drinsteht.
Zuletzt geändert von Fightmeyer am 18.09.2010, 13:34, insgesamt 1-mal geändert.
Beowulf

Re: Frage an die PHP-Experten...

Beitrag von Beowulf »

Was genau klappt denn nicht?
Antworten