trash: .htaccess - Verzeichnisschutz mal anders

Ich beschäftige mich erst seit kurzen näher mit htaccess - von daher bitte ich etwas um Nachsicht.

Anliegen:
Ich möchte verhindern, dass die Dateiendung .jpg bei direkter Eingabe des Pfades mit dem Deiteinamen im Browser verhindert wird, so dass sie nicht angezeigt werden soll - ein "Forbidden" ist erwünscht (ggf auch als eigens erstellete Fehlerseite.

Beispiel: http://www.meine-domain/ordner/ordner/ordner/123.jpg = Forbidden

Nun soll es aber möglich sein, das Bild das sich in einer Galerie befindet, trotzdem von der Seite http://www.meine-domain/ordner/ordner/index.html aus aufrufbar sein soll - es handelt sich dabei um eine Java-Script gesteuerte Galerie mit Vorschauen die bei Klick das größere Bild abrufen.

Mein bisheriger Lösungsansatz ist:

<FilesMatch ".(jpg|JPG|)$">
order allow,deny
allow from http://www.meiner-domain.de/modelle/purzelchen/index.html
allow from http://www.meine-domain.de/pages/galerie.html
deny from all
</FilesMatch>

Als Ergebnis kommt, dass das Bild in der Galerie nicht mehr vergrößert wird, es wird versucht zu laden, wird aber behandelt als das es nicht vorhanden wäre - es ist nur die Vorschau zu sehen. Bei eintippen direkt im Browser wird ausgegeben - Fatal Server Error

Wo ist der Denkfehler? wie kann ich das erfolgreich korrigieren?

  1. Hi,

    <FilesMatch ".(jpg|JPG|)$">
    order allow,deny
    allow from http://www.meiner-domain.de/modelle/purzelchen/index.html
    allow from http://www.meine-domain.de/pages/galerie.html
    deny from all
    </FilesMatch>

    Wo ist der Denkfehler? wie kann ich das erfolgreich korrigieren?

    Da oben hinter allow from ist der Denkfehler. Jede Resource wird vom User (bzw. dessen Brwoser) aufgerufen. Das einzige, was mit z.B. der galerie.html in Verbindung steht ist der bei jedem Request mitgesendete Referer - der ist aber beliebig manipulierbar.

    Du müsstest also hinter allow from deine eigene IP Adresse eingeben - dann wirds klappen. Das Problem ist halt, dass du das für jeden User machen müstest, was praktisch unmöglich ist.

    Außerdem kann er das Bild dann immer noch direkt aufrufen.

    Lösung:
    Alle jpg sperren - hast du schon
    Eine show_jpg.php Datei anlegen. Nur auf diese Datei soll man über HTTP Zugriff haben
    Diese DAtei überprüft anhand von Sessions oder so, ob der User ein bestimmtes Bild sehen darf.
    Wenn ja, dann gibt show_jpg.php das gewünschte Bild aus. (Da musst du nur ein paar header richtig setzen und dann einfach das Bild ausgeben lassen)

    Gruß
    Alex

    1. ich sehe schon - mein Vorhaben wird wohl scheitern.Ich habe ja schon die Galerie mit Java erstellt, damit sie sichtbar wird muss Java aktiv sein - somit auch die Rechtsklicksperre. Aber das direkte Aufrufen funzt dann immer noch und genau das soll irgendwie verhindert werden.

      1. Moin,

        ich sehe schon - mein Vorhaben wird wohl scheitern.Ich habe ja schon die Galerie mit Java erstellt, damit sie sichtbar wird muss Java aktiv sein - somit auch die Rechtsklicksperre. Aber das direkte Aufrufen funzt dann immer noch und genau das soll irgendwie verhindert werden.

        Du meinst JavaScript. Gibs auf, da hast du recht. Du kannst Bilder _nicht_ davor schützen gespeichert zu werden. Der HTTP-Referer kann gefaked werden, Rechtsklicksperren lassen sich in jedem vernünftigen Browser blockieren. Außerdem gibts (zumindest im Firefox) sowas wie Seiteninformationen, wo alle Medien aufgelistet sind und sich einfach irgendwo speichern lassen. Und wenns garnicht anders geht, macht man einen Screenshot. Wenn du Bilder nicht auf dem PC des Benutzers willst, stell sie nicht online.

        Gruß,
        Take

      2. ich sehe schon - mein Vorhaben wird wohl scheitern.Ich habe ja schon die Galerie mit Java erstellt, damit sie sichtbar wird muss Java aktiv sein - somit auch die Rechtsklicksperre. Aber das direkte Aufrufen funzt dann immer noch und genau das soll irgendwie verhindert werden.

        Java oder Java Script?

        Was genau willst du erreichen? Willst du verhindern, dass deine Bilder z.B. in fremden Seiten eingebunden werden oder wie?

        Mit meinem Lösungsvorschlag kannst du in die Richtung schon sehr viel unternehmen.

        Wenn jemand deine Galerie aufruft lasse einfach per PHP (wenn du das hast) eine Session erstellen. In dem show_jpg.php musst du dann nur noch prüfen ob diese Session existiert. Die Session kann z.B. einen Timestamp enthalten (oder du beschränkst gleich die Lebenszeit der Session) - so kannst du dann dafür sorgen, dass z.B. nur 30 sekunden nach Abruf der Galerie-Seite ein Bild geladen werden kann. Danach nicht mehr.

        Hier müsstest du halt die Größe und Anzahl deiner Bilder mit einrechnen - ansonsten sieht jemand mit einer langsamen Verbindung evtl. nie alle Bilder.

        Also schreib nochmal konkrete Fragen bzw. dein konkretes Problem - dann kann dir sicher geholfen werden.

        1. Moin,

          Was genau willst du erreichen? Willst du verhindern, dass deine Bilder z.B. in fremden Seiten eingebunden werden oder wie?

          Bitte, lasst sowas sein. Das vertreibt euch doch nur die Besucher. Wenn einer ein Bild von euch bei Google Bilder oder so findet, dann draufklickt und einfach nur ein schwarz weißes Standard-Forbidden vor die Nase kriegt, kommt so schnell nicht wieder. (Auch mit einem toll animierten bunten nicht-standard Forbidden würde _ich_ nicht wiederkommen.)

          Gruß,
          Take

          1. Hotlinking ist schon gestopt - es geht nur noch darum, dass ein Bild auf dem Server nicht direkt angesteuert werden kann, sondern nur von einer bestimmten Seite aus.
            Das ist der Kern des Anliegens

            1. Hallo,

              Hotlinking ist schon gestopt

              ach, wie denn?
              Wenn das einigermaßen wirksam sein soll, bräuchtest du nämlich ziemlich genau die Mechanismen, die dir schon empfohlen wurden.

              es geht nur noch darum, dass ein Bild auf dem Server nicht direkt angesteuert werden kann, sondern nur von einer bestimmten Seite aus.

              Und das hättest du dann "als Nebenwirkung" mit abgedeckt.
              Im übrigen gibt es, wie Alex im ersten Antwortposting schon andeutet, bei HTTP kein "von" in dem Sinn, wie du es wohl verstehst. Jeder Request ist für sich eigenständig und kommt höchstens "vom" Rechner des Besuchers. Die einzige Information, die das "von" nach deinem Verständnis im weitesten Sinn liefert, ist der Referer, und der ist unzuverlässig. Mit einem Referer-Check würdest du also bewirken, dass einige Besucher auch in deiner Galerie keine Bilder sehen würden.

              Eine Cookie-basierte Lösung (worunter in der Regel auch Sessions fallen) ist daher so ziemlich das Einzige, was helfen könnte. Was du damit nicht verhindern kannst: Dass jemand das Bild separat aufruft, *nachdem* er es einmal ordnungsgemäß in der Galerie gesehen hat.

              Das ist der Kern des Anliegens

              ... dessen Sinn mir immer noch nicht klar wird.
              Warum willst du den Direktabruf verhindern, wenn man das Bild doch jederzeit
               a) direkt per Rechtsklick und "speichern unter" abfischen kann (nein, die meisten Browser werden
                  über deine Rechtsklicksperre nur gelangweilt grinsen),
               b) mit Rechtsklick und "Bild öffnen" nochmal aus der Webseite herausgelöst anzeigen kann,
               c) je nach Browser mehr oder weniger komfortabel aus dem Browser-Cache fischen kann?

              So long,
               Martin

              --
              In der Theorie stimmen Theorie und Praxis genau überein.
              Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
              1. Ich werd's sein lassen - der Ton hier ist mir - naja! etwas zu wadenbeißerisch. Tschau selfhtml!

                1. Hallo,

                  der Ton hier ist mir - naja! etwas zu wadenbeißerisch. Tschau selfhtml!

                  huii, da stammt wohl jemand von einer Mimose ab ...

                  Trotzdem noch schöne Eiertage,
                   Martin

                  --
                  Die letzten Worte des Systemadministrators:
                  Nur gut, dass ich ein intaktes Backup habe.
                  Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
            2. Moin,

              Hotlinking ist schon gestopt - es geht nur noch darum, dass ein Bild auf dem Server nicht direkt angesteuert werden kann, sondern nur von einer bestimmten Seite aus.
              Das ist der Kern des Anliegens

              Lass es sein. Es bringt dir überhaupt _nichts_. Wer dein Bild haben will, kriegt es. Punkt. Du kannst nicht bestimmen, ob das Bild gerade "aus der Seite heraus" aufgerufen wird, oder einzeln. Jedenfalls nicht zuverlässig.

              Gruß,
              Take

              1. Hello,

                Hotlinking ist schon gestopt - es geht nur noch darum, dass ein Bild auf dem Server nicht direkt angesteuert werden kann, sondern nur von einer bestimmten Seite aus.
                Das ist der Kern des Anliegens

                Lass es sein. Es bringt dir überhaupt _nichts_. Wer dein Bild haben will, kriegt es. Punkt. Du kannst nicht bestimmen, ob das Bild gerade "aus der Seite heraus" aufgerufen wird, oder einzeln.

                Man kann aber erreichen, dass ein Bild nur bei Vorhandensein von persönlichen oder allgemeinen Zugriffsparametern angezeigt wird. Bei allgemeinen kann man das an den vorherigen "Besuch" der Übersichtsseite koppeln. Dieser Vorschlag kam ja auch schon mal.

                https://forum.selfhtml.org/?t=204586&m=1385903

                Liebe Grüße aus dem schönen Oberharz

                Tom vom Berg

                --
                 ☻_
                /▌
                / \ Nur selber lernen macht schlau
                http://bergpost.annerschbarrich.de
            3. Hello,

              Hotlinking ist schon gestopt - es geht nur noch darum, dass ein Bild auf dem Server nicht direkt angesteuert werden kann, sondern nur von einer bestimmten Seite aus.

              Und das geht eben nicht. Ein Request aus dem Browser heraus hat zwar ein eindeutiges Request-Ziel, aber keine eindeutig bestimmbare Request-Quelle.

              Das einzige, was Du machen kannst, ist eine Zugangsbeschränkung einzubauen, die sich dann aber den Inhaber der Zugriffsparameter auf _irgendeinem_ Client bezieht, jedoch nicht auf eine spezielle Maschine und einen bestimmten Client.

              Man kann auch dem Apachen sagen, dass er nur bei vorhandensein eines (gültigen) Cookies den Zugriff gestatten darf. Das bis auf Benutzerebene hinunter mit differenzierten Rechten zu treiben, schafft man mMn nicht. Dazu ist wieder Scripting und ein zusätzliches Rechtesystem erforderlich.

              Etwas eingrenzen könnte man das dann nur durch eine gesicherte Verbindung, aber selbst da könnte man nicht garantieren, dass die nicht an einem Proxy endet und hinter dem wieder dutzende von Clients sitzen, die sich ihre Zusammenhänge selber zusammenstellen. Ok, das wäre ungewöhnlich, aber nicht unmöglich.

              Liebe Grüße aus dem schönen Oberharz

              Tom vom Berg

              --
               ☻_
              /▌
              / \ Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de
              1. Hi,

                Hotlinking ist schon gestopt - es geht nur noch darum, dass ein Bild auf dem Server nicht direkt angesteuert werden kann, sondern nur von einer bestimmten Seite aus.
                Und das geht eben nicht. Ein Request aus dem Browser heraus hat zwar ein eindeutiges Request-Ziel, aber keine eindeutig bestimmbare Request-Quelle.

                doch, natürlich - die Request-Quelle ist der anfordernde Client selbst.

                Gut, der könnte natürlich ein Proxy oder ein Router sein, der den Request wieder "für" jemand anderen vermittelt, aber das ist vom Server aus tatsächlich nicht zuverlässig erkennbar. Er hat schließlich nur mit dem Client zu tun, der direkt die Anfrage an ihn richtet. Das ist sein Kommunikationspartner, das ist das "von" _dieses_ betrachteten HTTP-Requests.

                Schöne Eiertage,
                 Martin

                --
                Wichtig ist, was hinten rauskommt.
                  (Helmut Kohl, 16 Jahre deutsche Bundesbirne)
                Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                1. Hello,

                  Und das geht eben nicht. Ein Request aus dem Browser heraus hat zwar ein eindeutiges Request-Ziel, aber keine eindeutig bestimmbare Request-Quelle.

                  doch, natürlich - die Request-Quelle ist der anfordernde Client selbst.

                  Nein, nicht _der_ Client, sondern eben ein _beliebiger_ Client. Da es aber ein _beliebiger_ ist, ist er bezogen auf den Request, nicht bestimmbar.

                  Wohin das Routing dann die Antwort zurückleitet, hat damit erstmal nichts zu tun.

                  Liebe Grüße aus dem schönen Oberharz

                  Tom vom Berg

                  --
                   ☻_
                  /▌
                  / \ Nur selber lernen macht schlau
                  http://bergpost.annerschbarrich.de
          2. Hi,

            Bitte, lasst sowas sein. Das vertreibt euch doch nur die Besucher. Wenn einer ein Bild von euch bei Google Bilder oder so findet, dann draufklickt und einfach nur ein schwarz weißes Standard-Forbidden vor die Nase kriegt, kommt so schnell nicht wieder. (Auch mit einem toll animierten bunten nicht-standard Forbidden würde _ich_ nicht wiederkommen.)

            Lass das doch bitte den Betreiber entscheiden. Vielleicht will er einfach nicht, dass die Bilder aus dem Kontext gerissen werden, weil sie dann etwas falsches rüberbringen. Vielleicht will er auch einfach nur seine Macht spielen lassen ;)

            Aber vielleicht muss er das auch machen, weil er die Bilder nicht selbst geknipst hat sondern vom Urheber nur das Recht eingeräumt bekommen hat, sie im Rahmen der Galerie anzuzeigen und dafür sorgen muss, das sie nicht von anderen Seiten abrufbar sind.

            Vielleicht ist er auch der Urheber und will einfach seine Rechte durchsetzen. Nur weil der BGH (glücklicherweise - versteh mich da nicht falsch) entschieden hat, dass google die Bilder in der Bildersuche grundsätzlich zeigen darf, heißt dass nicht, dass jeder aus seine Rechte verzichten muss.

            Also es kommt immer ganz auf das an, was man erreichen will/muss etc. Pauschal sowas abzulehnen ist ein bisschen zu einfach.

            Und ja - auch mir ist natürlich klar, dass diese Bilder nicht völlig sicher sind. Man kann sie speichern, nen Screenshot machen etc. Aber sie können eben nicht so einfach verlinkt werden etc.

            Gruß
            Alex

  2. hi,

    Deine Anwendung beschreibt zwei Möglichkeiten der Darstellung, jedoch geht der Zugriff auf das Dateisystem in beiden Fällen denselben Weg: Http->Uri->Server.

    Die Anwendung läuft clientseitig, somit hast Du serverseitig keine getrennten 'Wege' zum Dateisystem.

    Möchtest Du die Aufgabe lösen, brauchst Du eine serverseitige Trennung für den Zugriff auf das Dateisystem.

    Hotti