afbeeldingen beveiligen?
Denk bijvoorbeeld aan een profielen website. De leden moeten wel hun eigen fotoalbum kunnen inzien, maar niet dat van een ander. Maar om een afbeelding te tonen moet deze ergens in een publieke map staan. Als je de juiste url van zo'n afbeelding weet dan kun je deze toch altijd opvragen? Uiteraard kun je het de gebruiker lastiger maken door moeilijke urls te gebruiken www.site.nl/album/234WFED/foto/asda3443adfna3j4a4rjadf343.jpg maar het feit blijft dat als persoon A de url van een foto van persoon B kent, dat persoon A dan de foto van persoon B kan zien. Toch?
Ja, je kan nooit een afbeelding 'onzichtbaar' maken. Zodra je iets op het web zet is het altijd beschikbaar voor een ander.
Heeft dit niet met chmod te maken? Dat je een map zo kunt beveiligen dat alleen php erbij kan?
Geen idee? Maar het moet toch op het scherm getoond worden... als dat bij persoon A kan dan kan het bij persoon B ook zou je zeggen.
Maar achter een inlog kan je natuurlijk wel maken wat jij wilt.
Je werkt dan niet met de echte img urls maar met een (random) gegenereerde code voor die img.
In de persoonlijk beveiligde paginas , kun je dan aan de hand van die code controleren of dat inderdaad een 'eigen' img is en dan die tonen.
En dat tonen doe je dat (bv) vanuit een php pagina met een img header
Misschien is bovenste helemaal niet nodig, alleen de img via php bestand weergeven met juiste header. Php kan bij die map Maar voor alle externe aanvragen zet je die map dicht met htaccess ! Klaar ! Koud kunstje !
Hoe zou zo'n url volgens jou eruit (kunnen) zien?
Ik ga het niet voor je maken.
Wat ik nog ongeveer herinner, even snel..
tonen img inde met sessions beveiligde omgeving:
<img src="foto.php?code=xyx" >
en die foto.php pagina is ongeveer (details weet ik echt nu even niet)
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
header ( img/jpeg .....
$flink=openjpg('fotomap/'.'xyz.jpeg // php kan WEL bij fotomap !!
en dan de img data outputten....
?>
header ( img/jpeg .....
$flink=openjpg('fotomap/'.'xyz.jpeg // php kan WEL bij fotomap !!
en dan de img data outputten....
?>
sorry, het is erg weet dat ff niet, dit kun je dus echt niet zo gebruiken, maar voor het idee ben je heel eind. Zoek op iets van "image php output GD ..."
succes
ah oke... thanks voor het idee... maar ik denk dat dat wel een belasting voor de server is, omdat ieder plaatje dan door php gerenderd moet worden... of zou dat wel meevallen?
Dat valt wel mee, php/GD schuift het blok data gewoon door..
Miscchien valt er nog wel iets slims met htaccess te bedenken?
Wat je ook zou kunnen doen is om de urls nooit openbaar te maken. Je zou een afbeelding kunnen opvragen als: img.php?img=fsadfsa9874892hj324 (zoals roland aangaf), en een string in een session var opslaan. Met een slim algoritme kan je dan de foto opvragen die ergens in een map staat. Niemand weet deze map behalve het systeem zelf. Dit wordt namelijk ook random aangemaakt door het systeem.
Hier bereik je dan eigenlijk mee dat tijdens elke sessie een andere code om de afbeelding op te vragen nodig is. Je kan de foto dan ook niet naar mensen doorsturen.
Oke, ik snap wat je bedoelt, maar wat bedoel je met "Niemand weet deze map behalve het systeem zelf. Dit wordt namelijk ook random aangemaakt door het systeem." Je kan toch geen random map aanmaken? Daar staan de foto's dan toch niet in? Wat bedoel je precies?
Die foto's die de gebruikers uploaden die worden (neem ik aan) met een scriptje geupload. Het pad naar die map, en de bestandsnaam, kunnen automatisch (en dan willekeurig) worden gegenereerd.
Het gaat hier puur om een fictief geval, ik ben niet met zo'n site bezog, maar vroeg me af hoe zoiets werkt. Wat jij zegt is inderdaad een goede.. maar als ik het goed begrijp kun je de foto's dus ook in een map zetten die een map hoger ligt dan de www map?
Uit het bovengenoemde blijkt dat je foto's op het privé deel van een server kunt zetten en via header toch gewoon kunt tonen. Hartstikke mooi, want op die manier staan privé foto's veilig. Maar nu vraag ik me eigenlijk af of zoiets ook met filmpjes kan. Kun je die ook buiten de www map plaatsen en toch gewoon afspelen?
Nee, dan kan je ook readfile() gebruiken.
Het spreek zich voor zich dat je foto's niet kan beveiligen tegen downloaden.
Dit kan toch wel als ze buiten de www map staan? Iemand die is ingelogd kan alleen z'n eigen foto's zien en niet die van iemand anders? Zie bijvoorbeeld de opmerking van Joris hierboven?
Maar mijn vraag is dus of je ook filmpjes die niet in de www map staan kunt afspelen (of downloaden)?
dit geld ook voor filmpjes en zo goed als alles wat op internet staat is te downloaden of te bekijken...
Als iets te bekijken of te luisteren is, is het zo goed als altijd te downloaden.
Eventueel kan je met mod_rewrite nog de URL een beetje aanpassen tot een normale image URL.
Gewijzigd op 13/06/2011 23:32:50 door - Ariën -
@Marco: als je ze kunt zien kun je ze downloaden, maar als ik zorg dat jij ze niet kunt zien, dan kun je ze ook niet downloaden :)
Ozzie PHP op 13/06/2011 23:36:35:
@Aar: oke... maar kan dat alleen met foto's of ook met filmpjes?
We hebben het altijd over bestanden, dus of het foto's filmpjes of weet ik veel wat zijn...
Quote:
@Marco: als je ze kunt zien kun je ze downloaden, maar als ik zorg dat jij ze niet kunt zien, dan kun je ze ook niet downloaden :)
Totdat iemand die wel de foto mag bekijken de foto gaat downloaden en op internet gaat verspreiden. Maar goed, dit houd je gewoon niet tegen :P
Gewijzigd op 13/06/2011 23:44:09 door - Ariën -
Oke, maar stel ik heb een ledensite... denk bijvoorbeeld aan facebook. Kan het dan zo zijn dat je een filmpje upload. Dit filmpe wordt dan buiten de www map gezet. En kun je dan toch dit fimpje gewoon in je browser bekijken? (gaa mij niet zozeer om het HOE maar meer om het OF)