foto's beveiligen op website
Ik heb de volgende vraag. Ik wil een soort fotodatabase maken waarbij men pas na het inloggen bepaalde foto's mag zien. Op zich is het inlogsysteem niet zo spannend en om te bepalen welke foto's wie mag zien stop ik ook in de DB maar hoe voorkom ik dat als men de fotonaam weet men rechtstreeks de foto aanroept via www.domain.com/fotonaam.jpg?
De foto's zouden dus in een beveiligde directory moeten staan maar hoe kan ik ze dan wel tonen als je ingelogd bent.
hoop dat iemand een idee heeft,
Gr,
Frank
Gewijzigd op 01/01/1970 01:00:00 door --
Dit is al vele malen behandeld. Zoek op htaccess.
Dat je met htaccess directories kan beveiligen weet ik. ik wil alleen een inlogvenster in mijn webpagina's en vanuit de database kunnen regelen welke foto's een bepaald account mag zien en welke niet.
Zover ik weet kan ik met htaccess een directory beveiligen en de daarin staande bestanden. Ik wil echter 1 grote map met bestanden en middels DB queries bepalen welke user welke file mag zien. Is zoiets ook mogelijk?
Ik heb al lopen zoeken op deze site en via google maar nog geen goede oplossing gevonden.
Gr,
Frank
Gewijzigd op 01/01/1970 01:00:00 door --
www.site.nl/allefotos/ Daarin zet je de foto's
- Je maakt een .htaccess bestand wat er voor zorgt dat www.site.nl/fotos/foto.jpg uitkomt bij www.site.nl/foto.php?foto=foto.jpg
- In foto.php check je of een persoon het bestand mag zien, zo ja, laad het bestand in, zo nee, toon een error melding.
- Je hebt een map: - Je maakt een .htaccess bestand wat er voor zorgt dat www.site.nl/fotos/foto.jpg uitkomt bij www.site.nl/foto.php?foto=foto.jpg
- In foto.php check je of een persoon het bestand mag zien, zo ja, laad het bestand in, zo nee, toon een error melding.
Wat een snelle reactie.
Ik had vanmiddag even zitten testen, want ik zou ook verwcahten dat een PHP script er wel bij zou kunnen komen..
Beveiligde directory gemaakt
In een andere directory een script dat een image uit de beveiligde directory opvraagd. helaas kreeg ik dan de vraag om het wachtwoord.
Wat me wel ineens doet denken: als ik met HTaccess wel toegang geef aan het ip adres van de server (heb een private ip-adres) en aan niemand anders en dan laat opvragen. wellicht dat het dan werkt. bedoel je zo iets?
ik zal nog wat gaan testen. Als je nog tips/ideeen hebt hoor ik het graag..
Gr,
Frank
2> Je kan met uploaden ervoor kiezen willekeurige bstandsnamen aan te maken, stukken moeilijker raden voor de anderen
3> Je kan in php credentials meegeven voor de login van htaccess, dit is de meest geschikte methode lijkt mij zo in jouw geval. ( $_SERVER['PHP_AUTH_USER'] en $_SERVER['PHP_AUTH_PW'] )
Danny schreef op 21.09.2008 21:36:
1> Een foto kan ook opgeslagen worden in de database.
Nooit doen, tenzij je op byte-niveau vergelijkingen wilt gaan maken tussen foto's. Het maakt je DB een heel stuk trager.
Gewijzigd op 01/01/1970 01:00:00 door --
Gewoon een kwestie van goede rechten instellen. Tenzij je Windows gebruikt dan heeft dat weinig zin.
Plaats de foto's in een map die zich buiten je webroot bevindt. Op die manier zijn foto's nooit meer via een directe url op te vragen en zijn ze alleen nog via het filesystem van de server (waar PHP wel toegang tot heeft) te benaderen.
Voor het weergeven van een foto gebruik je dan dus ook een PHP script. In dit script kun je dan eerst controleren of de opgevraagde foto (uit een GET variabele) door de betreffende gebruiker bekeken mag worden. Zo ja, dan output je de foto door de juiste headers mee te geven. Zo niet, dan zou je een standaard afbeelding kunnen outputten waaruit blijkt dat de gebruiker geen toegang heeft tot die foto.
Op de pagina waar je de foto's daadwerkelijk weer wilt geven, kun je gewoon een <img> tag gebruiken die er bijvoorbeeld als volgt uitziet:
Op getfoto.php bepaal je vervolgens adhv het id en de database om welke foto het gaat, controleer je of de gebruiker toegang heeft, en toon je eventueel de foto...
ps. Uiteraard zou je de controle of iemand toegang heeft tot een foto ook in een eerder stadium kunnen doen. Het enige dat getfoto.php dan nog hoeft te doen is de juiste foto uit de map laden en outputten als afbeelding.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
ik heb zojuist de volgende zaken getest:
Testopstelling:
www.domein.nl/foto.php aangemaakt met de volgende code:
<img src="./plaatjes/plaatje.gif">
in www.domein.nl/plaatjes/ een htaccess file met een redirect voor alle files naar de foto.php.
Deze redirect werkt en foto.php wordt netjes aangeroepen. Plaatjes worden echter niet getoont maar het bekende vakje met het rode kruisje
Verder heb ik de optie van Evert getest door in de plaatjes directpry een htaccess te maken waarin de volgende code staat:
order allow,deny
deny from all
Ik kom inderdaad niet meer in de plaatjes map maar ook foto.php geeft weer een rood kruisje.
Hoop dat jullie me verder kunnen helpen met wat extra scripts.
Gr,
Frank
En mijn oplossing dan?
Ik heb die van jou nog niet getest. Ik had mijn browser niet meer ververst toen ik mijn bericht aan het typen was en aan het testen was...
Ik ga het nog testen maar ben nu eerst even met wat anders bezig. Laat het weten zodra ik getest heb.
Gr,
Frank
Eindelijk weer tijd gehad om te testen. En jawel de optie van Blanche is een goeie! Thanks.
Het was even kijken hoe ik via een php script de foto moest tonen. Dus voor degenen die hetzelfde probleem hebben:
<code>
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
// hier kan de code komen te staan voor controle of de afbeelding getoond mag worden
$im = imagecreatefromjpeg("../plaatjes/beveiligd.jpg");
header('Content-type: image/jpeg');
// Output the image
imagejpeg($im);
// Free up memory
imagedestroy($im);
?>
// hier kan de code komen te staan voor controle of de afbeelding getoond mag worden
$im = imagecreatefromjpeg("../plaatjes/beveiligd.jpg");
header('Content-type: image/jpeg');
// Output the image
imagejpeg($im);
// Free up memory
imagedestroy($im);
?>
</code>
Groetjes,
Frank
Bij one.com is het niet mogelijk om content buiten de webroot te plaatsen, heb je dan nog een idee Blanche?