Bilder vor Zugriff schützen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Bilder vor Zugriff schützen

    Nach einer längeren Recherche samt lustiger Herumprobiererei dachte ich mir, ich frag dann doch mal nach.

    Ich hab ein Login Skript erstellt, funktioniert auch soweit alles, und nach dem Einloggen hat man die Möglichkeit sich in der Bildergallerie die Bilder anzuschauen.
    Ich möchte nun verhindern, dass jemand, wenn er erst einmal die URL des Bilder herausgefunden hat, dieses Bild sich anzeigen lassen kann
    1) ohne Einzuloggen
    2) direkt über die Adresszeile der Browsers

    Der erste Punkt lässt sich, wenn ich das richtig sehe über die .htaccess einstellen. Ich bin mir allerdings nur noch nicht ganz im Klaren darüber, wie die Zusammenarbeit eines php Logins mit dem Login über .htaccess aussieht, also sprich, wenn ich mit php eingeloggt habe und mir dann Bilder aus den über .htaccess geschützen Bereichen anzeigen lassen möchte, was muss ich machen um nicht ein weiteres Mal einzuloggen (diesmal halt dann über .htaccess)

    Dann wäre da mal noch eine generelle Frage zu Basic und Digest Authentication, was wohl eher eine Glaubensfrage werden könnte. Wozu überhaupt Digest Authentication, wenn es ja doch kaum was bringt?

    Zum zweiten Punkt muss ich sagen, hab ich ein paar lustige Versuche hinter mir, die nicht sonderlich viel gebracht haben. Ich hab RewriteRules ausprobiert, Referer und Allow, Deny. Allerdings hab ich jeweils ne 500er Meldung bekommen, was ja nicht gerade dafür spricht, dass ich es richtig gemacht habe.
    Ich hab aber auch so meine Zweifel, ob diese Versuche überhaupt hätten funktionieren können, da die Bilder ja schließlich in den <img> tags in der html datei stehen und damit einzeln vom Client angefragt werden.

    Vorschläge aller Art werden dankbar entgegen genommen

  • #2
    ich habs in einem script mal folgendermassen gelöst:

    - bilder liegen ausserhalb des webroots
    - anzeige der bilder über "bild.php"
    - die bild-aufrufende seite setzt am anfang einen session-parameter mit der bild-id
    - via session wird geprüft (auch in der bild.php), ob der user eingelogged ist oder nicht
    -- ist er es nicht, sieht er ein 1x1px schwarzes bild => imagecreate()
    -- ist er es, wird das bild via readfile() aus dem ordner gezogen
    ---- danach wird der session-wert für die bild-id gelöscht

    den "rechten-maustaste speicherer" kannst du ärgern, indem das angezeigte bild als background-img per css eingebunden wird, darüber liegt dann ein entsprechend grosses transparentes gif/png.
    Kissolino.com

    Kommentar


    • #3
      Nochmal zur Klärung:

      Du generierst über die bild.php eine HTTP Anwort a la:
      ---------------------
      HTTP/1.1 200 OK
      ...
      Content-Type: image/jpeg

      readfile(bild_id)
      --------------------

      Und durch das Verschieben der Files aus dem Webroot Verzeichnis kann auch keiner per URL darauf zugreifen.

      Die Anregung für die rechte Maustaste ist zwar nett, aber berechtigte User dürfen das von mir aus bei mir schon machen

      Die Idee finde ich generell schon mal gut, was mir Sorgen macht sind ein paar Einträge im Manual, dass readfile() recht langsam sei und es wohl Probleme bei großen Files gäbe (aber ich glaub erst ab 2MB, was dann wiederum nicht so schlimm wär)

      Außerdem würde ich die Bilder gerne im Webroot Verzeichnis lassen, aber wenn die sowieso nur über diese bild.php übergeben werden, dann müsste es doch ein "Deny from all" in der .htaccess ausreichen, oder?

      Kommentar


      • #4
        Original geschrieben von quarks
        Nochmal zur Klärung:

        Du generierst über die bild.php eine HTTP Anwort a la:
        ---------------------
        HTTP/1.1 200 OK
        ...
        Content-Type: image/jpeg

        readfile(bild_id)
        --------------------

        Und durch das Verschieben der Files aus dem Webroot Verzeichnis kann auch keiner per URL darauf zugreifen.
        ja

        Die Idee finde ich generell schon mal gut, was mir Sorgen macht sind ein paar Einträge im Manual, dass readfile() recht langsam sei und es wohl Probleme bei großen Files gäbe (aber ich glaub erst ab 2MB, was dann wiederum nicht so schlimm wär)
        es gibt ja auch noch alternativen zu readfile ...
        Außerdem würde ich die Bilder gerne im Webroot Verzeichnis lassen, aber wenn die sowieso nur über diese bild.php übergeben werden, dann müsste es doch ein "Deny from all" in der .htaccess ausreichen, oder?
        sollte reichen oder du schützt den ordner mit einem passwort per htaccess und lässt die htpasswd weg.
        Kissolino.com

        Kommentar


        • #5
          Original geschrieben von Wurzel
          sollte reichen oder du schützt den ordner mit einem passwort per htaccess und lässt die htpasswd weg.
          Nee, das ist Unfug - wofür sollte man eine Passwortabfrage machen, wenn es gar kein Passwort gibt und auch nicht geben soll. Dann ist DENY FROM ALL schon der bessere Weg.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Hab ich das richtig verstanden, dass er die Bilder in einem Verzeichnis lässt, welches per URL erreichbar ist, es aber mit htaccess inkl. Passwort sperrt?
            Wenn ja, wie macht man das, dass interne Skripte darauf zugreifen können?

            Kommentar


            • #7
              Original geschrieben von Realmaker
              Hab ich das richtig verstanden, dass er die Bilder in einem Verzeichnis lässt, welches per URL erreichbar ist, es aber mit htaccess inkl. Passwort sperrt?
              Wenn du das so verstanden hast, hast du meinen letzten Einwand nicht verstanden - Passwortschutz ist nicht nötig, sondern ein genereller Schutz vor einem Zugriff per HTTP reicht aus.
              Wenn ja, wie macht man das, dass interne Skripte darauf zugreifen können?
              Dafür "macht" man gar nix, das ist einfach so - schließlich greift ein internes Script ja nicht über HTTP auf die Dateien zu, sondern über das Dateisystem ...
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Aaaachsoooo...
                D.h. er schützt nur der Verzeichnis per htaccess, es kann dann keiner direkt auf die Dateien zugreifen, nur die lokalen Skripte können das, richtig?

                Kommentar


                • #9
                  Es gibt doch n Problem, denn das was ich machen wollte, ist doch etwas leicht anderes.
                  Ich wollte Dateien zum Download anbieten und verhindern, dass auf diese direkt verlinkt werden kann, indem ich sie in ein htaccess-geschützes Verzeichnis lege, nur funktioniert dann ja nicht mehr der meta-refresh mit Verlinkung auf die Datei, da sie ja geschützt ist =/
                  Was kann man dagegen machen?

                  Kommentar


                  • #10
                    nix meta-refresh, direkt in die php-datei einlesen und mit entsprechendem header ausgeben.
                    Dieses Schreiben wurde automatisch erstellt und ist ohne Unterschrift gültig.

                    Kommentar


                    • #11
                      *seufz*
                      Mal wieder eine Frage nach der nächsten - und das zu einem Thema, das eigentlich schon zur Genüge durchgekaut worden ist.
                      Ich wollte Dateien zum Download anbieten und verhindern, dass auf diese direkt verlinkt werden kann, indem ich sie in ein htaccess-geschützes Verzeichnis lege, nur funktioniert dann ja nicht mehr der meta-refresh mit Verlinkung auf die Datei, da sie ja geschützt ist
                      Sieh mal an - und das war dir nicht vorher klar ...?
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        Nein, da ich bisher nur das Problem des OPs verstanden habe plus den Lösungsvorschlag, den ich nochmal wiederholt habe.

                        Kommentar


                        • #13
                          nur funktioniert dann ja nicht mehr der meta-refresh mit Verlinkung auf die Datei, da sie ja geschützt ist =/
                          Was kann man dagegen machen?
                          Indem du nicht direkt das Bild als Ziel des meta refresh's angibst, sondern eine PHP Datei und einen Parameter. Die PHP Datei kann anhand dieses Parameters erkennen, welches Bild geladen werden soll, liest es mittels readfile() ein und gibt es mit dem korrekten header() an den Browser aus.

                          Gruss

                          tobi
                          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                          Kommentar


                          • #14
                            Ah ok, danke für die antwort

                            Kommentar

                            Lädt...
                            X