Separaten Zugriff auf Dateien eines HTML-Dokuments verhindern



  • Wie ist es auf einer Webseite möglich, den Zugriff auf bestimmte Dateien von außerhalb zu sperren?
    Ein Beispiel: Auf dem Dokument test.html wird ein Bild test.jpg dargestellt. Wenn man also www.example.com/test.html in den Browser eingibt, werden das Dokument und das Bild ganz normal geladen. Wenn man aber versucht, das Bild direkt zu öffnen, indem man www.example.com/test.jpg eingibt, dann wird der Zugriff verweigert und je nach Einstellung entweder ein Standardbild gezeigt oder auf die Seite weitergeleitet.

    Wird so etwas per HTML-Quellcode geregelt oder macht man das in den Einstellungen des Webspaces? Und kann man das auch realisieren, wenn man nur einfachen Webspace zur Verfügung hat, der keine dynamischen Inhalte ermöglicht? Wenn ja, wie?



  • Sinn macht es ja nun wirklich nicht, dem User das Bild zu zeigen und
    gleichzeitig den Zugriff zu verweigern. Im Moment wo er es sieht, hat er's
    ja schon auf seinem Rechner.

    Meines WIssens geht das nicht und waäre auch sinnlos.

    Was willst Du damit erreichen ?



  • Ich meine ja nicht, dass er das Bild vorenthalten bekommen soll. Auf die Festplatte kopieren kann er es sich von mir aus, das ist mir egal. Mein Ziel ist es, die Direktverlinkung zu unterbinden. Wenn jemand auf meine Seite verlinkt, soll er sich an die HTML-Dateien halten und nicht irgendwelche internen Dateien verlinken.
    Ein Beispiel aus der Praxis: Stell dir vor, du hast einen Haufen Bilder auf deiner Seite und irgendjemand kommt darauf, diese Bilder in einem Forum zu zeigen, indem er das img-Tag benutzt. Dann kostet dich jeder Aufruf der Forumsseite automatisch Bandbreite. Wenn er aber dazu gezwungen wird, nur die HTML-Seite zu verlinken, dann kostet dich das ganze erst dann Bandbreite, wenn der Benutzer deine Seite tatsächlich verwendet.



  • Dann erzeuge die Bilder on-the-fly.

    zB Lade das jpg in den Speicher und jage es mit dem passenden HTML-Header
    direkt über stdout raus.

    <img src="getfil.exe?PIC=blabla.jpg">



  • Das Stichwort ist HTTP-Referrer. Bei einem Link bzw. einer eingebetteten Resource wird die Herkunftsadresse mitgeschickt. Du könntest nun prüfen, ob diese Adresse zu Deiner Seite gehört und nur im positiven Fall das richtige Bild ausliefern.

    Sowas kannst Du in einer Skriptsprache abfangen, es gibt aber auch Webserver-Plugins dafür.



  • Es geht nicht.

    Der Browser macht 2 voneinander unabhängige Requests. Zunächst fragt er nach der HTML-Seite. In der HTML-Seite sieht der Browser, dass er noch das JPG benötgt. Also macht er noch einen Request. Ob der Request nun dadurch ausgelöst wurde, dass der Dateiname in der HTML-Seite steht, oder aus einem anderen Grund, kann der Server nicht wissen.

    Na ja - Bastellösungen sind natürlich denkbar. Der Server könnte die Grafik nur ausliefern, wenn die zugehörige HTML-Seite in den letzten 5 Sekunden abgerufen wurde. Aber das geht mit statischen Seiten nicht. Ich kenne zumindest keinen Server, der so ein Feature anbieten würde. Und wenn ich einen wüsste, wüsste ich, dass ich so einen Blödsinn nicht verwenden würde.



  • tntnet schrieb:

    Es geht nicht.

    doch. Zwar nicht zu 100% zuverlaessig, aber es geht.



  • zwutz schrieb:

    tntnet schrieb:

    Es geht nicht.

    doch. Zwar nicht zu 100% zuverlaessig, aber es geht.

    Doch, auch 100% zuverlässig. Zumindest von der Serverseite aus. 😉

    Einfach die Graphik in ein geschütztes Verzeichnis packen und im PHP-Skript einlesen und Base64-kodiert direkt beim <img>-Tag ausgeben. Nur leider können viele Browser das (noch?) nicht verarbeiten. Je nachdem, wie die Zielgruppe und der Anwendungsfall aussehen, kann das aber durchaus eine denkbare Lösung sein. Wenn das Skript also nur von dir genutzt wird, oder du z.B. sicher sein kannst, dass alle Benutzer einen Opera verwenden (können), wäre das denkbar.

    Für die breite Anwendung aber natürlich ungeeignet, da gebe ich dir Recht. Und natürlich nicht auf "einfachem" Webspace machbar ... 🙂



  • Hai [unleserlich],

    das wird ihm nicht so richtig weiter helfen 🙂

    Ich würde das, wie gesagt, in einem Container ablegen und on-the-fly via
    stdout mit dem passenden Header abschicken. Mit PDFs mache ich das jedenfalls
    so und es funzt.



  • Stimmt, aber per Definition geht es 😉
    Bzw. da er nur "einfachen" Webspace zu haben scheint, bleiben wir weitgehend beim "nicht machbar". 😉

    P.s. Der Name ist ein Insider. Wer den nicht kennt, darf sich gerne mit "árnyék" als Notlösung behelfen :p



  • du könntest mal nach "Hotlinking" googlen 🙂


Anmelden zum Antworten