Torwächter: Bilder aus geschütztem Ordner öffnen und anzeigen.(schwer)

Hallo zusammen,

ich habe eine wichtige Frage. Ich möchte meine Bilder (denkt was ihr wollt :) ) in einem geschützen Verzeichnis (durch .htaccess) ablegen.
Jetzt meine Frage: wie kann ich diese mit PERL auslesen und anzeigen ? Mit Textdateien funzt es, aber wie mit Bildern ?

Oder habt Ihr eine andere Idee ?

(ich darf die .htaccess nur begrenzt ändern(User hinzufügen/entfernen, Verzeichnis sperren)

Für eure Hilfe bedanke ich mich im Voraus.

Mit freundlichen Grüßen
Torwächter

  1. Hallo,

    ich habe eine wichtige Frage. Ich möchte meine Bilder (denkt was ihr wollt :) ) in einem geschützen Verzeichnis (durch .htaccess) ablegen.

    Geht es darum, daß diese Bilder nicht per download gezogen werden sollen?

    Jetzt meine Frage: wie kann ich diese mit PERL auslesen und anzeigen ? Mit Textdateien funzt es, aber wie mit Bildern ?

    In welcher Form möchtest du diese Bilder denn auslesen? Kannst du diese nicht einfach  per <img src=... /> in eine HTML-Datei einbinden? Was soll mit den Grafiken geschehen?

    Gruss Sven

  2. Moin!

    ich habe eine wichtige Frage. Ich möchte meine Bilder (denkt was ihr wollt :) ) in einem geschützen Verzeichnis (durch .htaccess) ablegen.
    Jetzt meine Frage: wie kann ich diese mit PERL auslesen und anzeigen ? Mit Textdateien funzt es, aber wie mit Bildern ?

    Perl kennt die Beschränkungen der .htaccess-Datei nicht, das ist nur was für den Webserver. Perl greift gewöhnlich ja per Dateisystem auf Dateien zu, und genauso kannst du es auch bei Bildern machen.

    Die Frage ist doch: Was willst du mit den Bildern machen? Die Dateinamen in ein HTML-Dokument einbinden, damit sie angezeigt werden? Dann greift natürlich .htaccess wieder, und der Zugriff wird ohne Paßwort verweigert.

    Lieferst du die ansonsten geschützten Bilder per Skript Byte für Byte direkt aus, dann kann man diesen Datenstrom speichern - dem Browser ist egal, ob eine Datei die Daten liefert, oder ein Skript: Was er anzeigt, liegt im Cache und kann auch gespeichert werden.

    - Sven Rautenberg

    1. Hallo Sven,

      ersteinmal danke für deine Antwort.

      Ich möchte die Bilder anzeigen. Es geht mir nicht darum, dass die Bilder nicht gespeichert werden können (geht ja auch mit Rechtsklick...) sondern dass nicht ein paar Leute hingehen und alle Bilder mit einem WebSite Downloadprogramm einfach runtersaugen.
      Daher liegen sie in einem Geschützen Ordener. Das Password (htacces) kann / will ich nicht herausgeben, da sonst das Problem mit dem WebSite Downloadprogramm weiterhin besteht. So muss PERL das Verzeichnis öffnen und die Bilder anzeigen.
      Die Idee mit dem Byte für Byte auslesen ist gut, wie funzt das ? (unter einem UnixSystem)

      Viele Grüße
      Torwächter

      1. Moin!

        Die Idee mit dem Byte für Byte auslesen ist gut, wie funzt das ? (unter einem UnixSystem)

        Hilft aber nicht. Jedenfalls nicht ohne aufwendigere serverseitige Kontrolle.

        Wenn du ein Bild nicht so einbindest:
        <img src="nichtsaugbar/bild.jpg">
        dann hast du das Problem, daß es doch jeder saugen kann.

        Wenn du dein Bild so einbindest:
        <img src=cgi-bin/perl-bildauslieferer.pl?bild.jpg">
        dann saugt das immer noch jeder.

        Du mußt also im Perl-Skript irgendwie kontrollieren, wieviel Daten der Mensch in welcher Zeit schon abgerufen hat, das irgendwo speichern und notfalls "nichts" ausgeben.

        Das Problem dürfte sein, den Benutzer eindeutig zu identifizieren und festzustellen, daß er saugt, nicht surft.

        Wenn du sowas programmiert hast, sollte sich die Frage "Perl gibt byteweise ein Bild aus" vielleicht schon ganz einfach dadurch lösen lassen, daß Perl einfach ein Redirekt aufs Bild ausgibt.

        Mir kommt da gerade eine recht nette Idee, welche natürlich nur funktionieren kann, wenn du das Saugen nicht aus trafficgründen verhindern willst:

        Du kennst die maximale Anzahl der zu schützenden Bilder je Seite. Dein Skript merkt sich die IP-Adresse des Abrufenden und liefert in einer gewissen Zeit (durchschnittliche Downloadzeit für eine Seite) einfach nur diese Maximalzahl an Bildern aus. Wird die Zahl der Bildabrufe überschritten, kommt einfach nur eine leere Grafik mit einem Hinweistext, doch kurz zu warten und dann Reload zu drücken.

        Das stört reguläre Besucher nur minimal, aber nervt die Sauger sicher tierisch, wenn sie denken, die komplette Site zu haben, aber 95% der Bilder aus dieser "Bitte Reloaden"-Grafik besteht, weil sie zu schnell gesaugt haben.

        Wie du die Grafik an den Mann bringst, ob per Redirect oder durch Direktausgabe im Perl-Skript, bleibt dir dann überlassen.

        - Sven Rautenberg

        1. Jaaaa du hast mich auf eine Sehr gute Idee gebracht:

          ich rufe das Script aus einem Formular auf und sende dabei einen Sicherheitscode mit (z.B. aktuelles Datum mal Zeit). Das Script, das die Bilder anzeigt generiert auf die Selbe Art ein Sicherheitscode und vergleicht diesen mit dem ankommenden Code. Ist der Code der selbe werden die Bilder zurückgegeben, wenn nicht "Error.gif". Das müßte doch funzen oder ?

          Achja so ein WebSite-Downloadprogramm follgt nur den Links (www.test.de/verzeichnis/anzeige.html)? oder greift es in das Verzeichnis (www.test.de/verzeichnis/) ?

          Viele Grüße
          Torwächter

          1. Re-Moin!

            ich rufe das Script aus einem Formular auf und sende dabei einen Sicherheitscode mit (z.B. aktuelles Datum mal Zeit). Das Script, das die Bilder anzeigt generiert auf die Selbe Art ein Sicherheitscode und vergleicht diesen mit dem ankommenden Code. Ist der Code der selbe werden die Bilder zurückgegeben, wenn nicht "Error.gif". Das müßte doch funzen oder ?

            Wenn du garantieren kannst, daß die Zeit auf Client und Server identisch ist. Das kannst du normalerweise aber nicht. Was ist mit den Leuten in... Paraguay. Deren Systemzeit ist von unserer ziemlich verschieden. Und was ist, wenn die Uhr einfach falsch geht? Auch doof.

            Generell ist solch ein Parameter schon nicht schlecht, nur darf er eben nicht zum Client gelangen und in dem Link drinstecken, sonst ist er vom Saugprogrammen verfolgbar.

            Achja so ein WebSite-Downloadprogramm follgt nur den Links (www.test.de/verzeichnis/anzeige.html)? oder greift es in das Verzeichnis (www.test.de/verzeichnis/) ?

            Stimmt, die Links werden verfolgt. Und vielleicht wird auch versucht, ein Directory-Listing zu erhalten - was man ja durch das Vorhandensein einer index.html verhindern kann, oder auch per .htaccess einfach DirectoryIndex verbietet.

            - Sven Rautenberg

  3. Hallo Torwächter,

    Jetzt meine Frage: wie kann ich diese mit PERL auslesen und anzeigen ? Mit Textdateien funzt es, aber wie mit Bildern ?

    Bits sind Bits sind Bits ...

    Du kannst z.B. in Deinem Perl Programm die JPG Datei lesen (binmode!) und dann rausschreiben, etwa so:

    <img src="www.gamesis.de/cgi-local/showdirtypicture.pl">

    und in showdirtypicture.pl:

    open (FH, "</my/path/to/dirty/pictures/dirty.jpg");
    binmode FH;
    @dirt = <FH>;
    close FH;

    $| = 1;
    binmode STDOUT;
    print "content-type image/jpeg\n\n"; # der passende MIME-Typ
    print @dirt;

    Sollte funktionieren (gib' mal Bescheid); ggf. könnte auch die Doku einer der MIME Packages von Perl weitere Dienste leisten.

    Ach ja, welches Bild angezeigt werden soll, kannst Du natürlich mit CGI-Parameter übergeben, also z.B.:
    <img src="www.gamesis.de/cgi-local/showdirtypicture.pl?banal.jpg">

    Ciao
      K@rl

    PS: schwer? ...

    ---
    entferne NO-SP-AM- von eMail Adresse