[html/php] Image buiten domein blokkeren

Pagina: 1
Acties:

Onderwerpen


  • commeric
  • Registratie: November 2002
  • Laatst online: 14-08 22:32
Ik weet niet goed hoe ik de titel moet noemen, maar dit leek me wel aardig.
Je komt bijv wel eens op sites en als je dan een plaatje ziet staat. http://foo.com/blaat.jpg en je wilt die dan op een forum posten
code:
1
[img]http://foo.com/blaat.jpg[/img]

Dan krijg je een plaatje te zien met "This image is only avaible on www.foo.com".
Of iets in die strekking.
Maar hoe krijg je dat voor elkaar. Dat je alleen maar images binnen je eigen domein kan laten zien, en dat andere sites er niet naar kunnen linken.

Ik neem aan dat dit al eerder is gevraagt, maar na wat zoeken kwam ik er niet uit.

  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 11:35

Tjark

DON'T PANIC

Met Apache webserver en .htaccess bestand. lees bv dit maar http://www.thudfactor.com/writing.php?show=18 en
http://idefix.net/~koos/irregular.php/irregular-20020726

[ Voor 23% gewijzigd door Tjark op 15-02-2003 22:12 . Reden: nog een linkje ]

*insert signature here


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 01:06
Je kunt ook een beveiligde map maken met alle plaatjes en dan plaatjes aanroepen via een php bestand, dan kun je meteen achterhalen hoe vaak een bepaald plaatje opgevraagd wordt.

Verwijderd

Een iets minder veilige manier, maar toch ook zeer bruikbaar is het door middel van PHP te doen. Alleen weet ik niet of je perse een URL wilt als 'http://www.domein.nl/plaatje.jpg'...

Je maakt een PHP bestand aan wat je aanroept met: image.php?file=123, en in dat PHP bestand doe je dan een check voor referer en mits goed show je het plaatje met het betreffende ID of zo niet een deeplink.jpg image.

Zo kan de bezoeker niet zien waar het plaatje staat of heet en je hoeft geen gebruik te maken van mod_rewrite.

Slechts een alternatief dus :)

  • Boomerang
  • Registratie: November 2000
  • Niet online
Verwijderd schreef op 16 February 2003 @ 13:27:
Een iets minder veilige manier, maar toch ook zeer bruikbaar is het door middel van PHP te doen. Alleen weet ik niet of je perse een URL wilt als 'http://www.domein.nl/plaatje.jpg'...

Je maakt een PHP bestand aan wat je aanroept met: image.php?file=123, en in dat PHP bestand doe je dan een check voor referer en mits goed show je het plaatje met het betreffende ID of zo niet een deeplink.jpg image.

Zo kan de bezoeker niet zien waar het plaatje staat of heet en je hoeft geen gebruik te maken van mod_rewrite.

Slechts een alternatief dus :)
Probleem is alleen dat die headers nogal makkelijk te faken zijn. Sommige browsers geven zelfs geen refer mee, hoe wil je dat dan aanpakken ?

  • Cipri
  • Registratie: Januari 2001
  • Laatst online: 29-07-2024

Cipri

Of niet natuurlijk...

Oh? Ik kan geen een browser bedenken die geen Referer: header meestuurt.
Alle browsers doen dat, dat staat namelijk in de HTTP standaards. Zoniet, dan moet je als server aannemen dat er geen referer is. :)

-=[ Murlocs Ate My Boots]=- Sylvanas Alliance - EU - Orosei lvl 100 Paladin


  • Boomerang
  • Registratie: November 2000
  • Niet online
Cipri schreef op 16 February 2003 @ 13:41:
Oh? Ik kan geen een browser bedenken die geen Referer: header meestuurt.
Alle browsers doen dat, dat staat namelijk in de HTTP standaards. Zoniet, dan moet je als server aannemen dat er geen referer is. :)
Niet standaart nee, maar bij browsers als opera, mozilla, netscape is refering makkelijk uit te zetten ivm privacy. Dan zouden die gebruikers geen toegang krijgen tot het plaatje ? Een echte waterdichte oplossing is er dus niet..
Opera too, at least from version 3.62 onwards (rather simply, in the
Advanced sheet under Preferences). This is what Opera's help says about
this setting:
"Referrer logging
Do you want Opera to send information refering to the page from where
the document or picture was requested? If you enable this option, web
servers can store information about the site that you last visited
before you jumped to the current one. This allows webmasters to analyse
how people find their way to his website. DISABLE this option if you
don't want to reveal this information."

That's an interesting formulation, making it basically a privacy issue -
as it is, in part.
bron

Verwijderd

Ik quoteer mijzelf: "Een iets minder veilige manier, ..."

Ofwel, het kan idd dat men dus de referer manipuleert. Maar wat heeft die "webmaster" er nu aan die dat ene plaatje van je website leeched? Moet hij er soms een tekst bij plaatsen als: "Als je Opera of Mozilla gebruikt; zet dan de referer uit om de website zo goed mogelijk te kunnen bekijken!" (slechts als voorbeeld)

Ofwel, de boodschap komt dan ook wel aan dmv een PHP scriptje, lijkt mij. Al blijft het dmv mod_rewrite natuurlijk veiliger.

Ik heb btw even zitten klooien met de 2e link van TjarkVerhoeven en het werkt aardig, alleen zijn er met een aantal dingen geen rekening gehouden. Zo wordt er dmv een RewriteBase de dir vast gesteld van alle images. En zo dus ook van het plaatje voor "de boodschap": deeplink.gif.

Dus zul je het aanpassen als:

code:
1
2
3
4
5
6
RewriteEngine on

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://domein.nl/IMG_DIR/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.domein.nl/IMG_DIR/.*$ [NC]
RewriteRule .*\.(jpg|gif)$ deeplink.gif [T=image/gif,L]


IMG_IDR is natuurlijk de map waar de images staan.

Hierbij staat deeplink.gif op de betreffende URL: http://www.domein.nl/deeplink.gif, want anders wordt er nog geen plaatje geladen omdat in de code op die website een plaatje wordt gebruikt uit de directory die beveiligd is, en dat lukt natuurlijk niet ;)

Het beste kun je als deeplink.gif een klein plaatje nemen als; http://www.phpdesk.nl/deeplink.gif of dit gewoon leeglaten in de vorm van:

code:
1
RewriteRule .*\.(jpg|gif)$ [T=image/gif,L]


Waardoor er helemaal niets geladen wordt, en wat misschien ook wel de beste manier is.

[ Voor 55% gewijzigd door Verwijderd op 16-02-2003 14:00 . Reden: Extra... ]


Verwijderd

De oplossing van Markuz is de beste imo. Je kan ook een watermerk over de foto plaatsen als er geen of de verkeerde Referer wordt meegegeven. Verder kan je ook met ImageJPEG() als derde parameter (=quality) een heel laag getal meegeven, waardoor mensen toch naar jouw site moeten om de afbeelding op hoge kwaliteit te zien.

  • commeric
  • Registratie: November 2002
  • Laatst online: 14-08 22:32
het werkt perfect.
Bedankt allemaal! :D

Verwijderd

Alle HTTP headers zijn easy te faken dus daar hoef je eigenlijk al geen rekening mee te houden.

  • commeric
  • Registratie: November 2002
  • Laatst online: 14-08 22:32
Verwijderd schreef op 18 februari 2003 @ 16:39:
Alle HTTP headers zijn easy te faken dus daar hoef je eigenlijk al geen rekening mee te houden.
betekend dat ook dat je als iemand een link zet op een forum met een plaatje die door een htaccess beschermd zou moeten zjn. dat het dan zo te faken is dat het plaatje wel zichtbaar is?
Pagina: 1