afbeeldingen beveiligen?
Pagina: « vorige 1 2 3 volgende »
Je www map is niets meer dan een map waar Apache (of een andere service) standaard z'n spul in zoekt. Met andere configuratie of scripts kan je spul overal vandaan halen, of zelfs genereren! Dat doe je immers ook met PHP. Dus ja, je kan een script schrijven dat een filmpje doorsluist naar de webbrowser, ook als dat filmpje niet in je www-map staat.
oke... thanks :)
Ozzie PHP op 13/06/2011 23:45:26:
Oke, maar stel ik heb een ledensite... denk bijvoorbeeld aan facebook. Kan het dan zo zijn dat je een filmpje upload. Dit filmpje wordt dan buiten de www map gezet. En kun je dan toch dit filmpje gewoon in je browser bekijken? (gaat mij niet zozeer om het HOE maar meer om het OF)
Nee, dat kan niet. Tenzij er een PHP-script is die het ophaalt uit de hoger gelegen mappen uit de root.
Stel je hebt privé filmpjes van leden... dan zou ik die uit veiligheidsoverwegingen liever buiten de www map opslaan, maar uiteraard moet men de filmpjes wel gewoon kunnen bekijken. Maar als ik het goed begrijp kan dit dus wel, alleen moet je er even wat extra scripting werk voor doen :)
Jup...
okidoki :)
Je hebt een map met bestanden.
images/
Daar in staat
foto-die-niet-iedereen-mag-zien-1.jpg
foto-die-niet-iedereen-mag-zien-2.jpg
foto-die-niet-iedereen-mag-zien-3.jpg
niet-beschikbaar.jpg
check.php
zet in images een .htaccess
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<IfModule mod_rewrite.c>
RewriteEngine On
#Deze regel kan je eventueel weglaten / aanvullen.
RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g|png)$ [NC]
RewriteRule .* check.php [L]
</IfModule>
RewriteEngine On
#Deze regel kan je eventueel weglaten / aanvullen.
RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g|png)$ [NC]
RewriteRule .* check.php [L]
</IfModule>
En in check.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?
session_start();
$requested_image = $_SERVER['REQUEST_URL'];
$image = end(explode('images/',$requested_image));
# [eventueel: Cachen voorkomen]
/*
header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); # Datum in het verleden
header('Pragma: no-cache');
*/
# HIER VALIDEREN OF DE GEBRUIKER TOEGANG HEEFT tot deze afbeelding.
# Bijvoorbeeld met een sessie o.i.d.
if(file_exists($image) && $toegang)
{
# http://us2.php.net/manual/en/function.finfo-file.php
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $image);
header('Content-Type: '.$mime);
readfile($image);
exit;
}
else
{
header('Content-Type: image/jpeg');
readfile('niet-beschikbaar.jpg');
exit();
}
?>
session_start();
$requested_image = $_SERVER['REQUEST_URL'];
$image = end(explode('images/',$requested_image));
# [eventueel: Cachen voorkomen]
/*
header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); # Datum in het verleden
header('Pragma: no-cache');
*/
# HIER VALIDEREN OF DE GEBRUIKER TOEGANG HEEFT tot deze afbeelding.
# Bijvoorbeeld met een sessie o.i.d.
if(file_exists($image) && $toegang)
{
# http://us2.php.net/manual/en/function.finfo-file.php
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $image);
header('Content-Type: '.$mime);
readfile($image);
exit;
}
else
{
header('Content-Type: image/jpeg');
readfile('niet-beschikbaar.jpg');
exit();
}
?>
Gewijzigd op 14/06/2011 01:02:57 door Pieter van Linschoten
Dankjewel Pieter. Ga je er nu vanuit dat die map images buiten de WWW map staat? Zo ja, dan heb je toch geen htaccess nodig? Of is dit een voorbeeld waarbij de images map gewoon in de www directory staat?
Want wat heb je liever?
www.domein.nl/check.php?file=image1337.jpg
of
www.domein.nl/images/image1337.jpg
Gewijzigd op 14/06/2011 00:39:24 door - Ariën -
Door alle image bestanden naar een php bestand te verwijzen, kunnen deze niet worden bekeken zonder dat je bijvoorbeeld ingelogd bent, maar hoef je niet je afbeeldingen van een of andere plek in te laden.
Je kan die htaccess regel weghalen, om enkel afbeeldingen uit te sluiten, dan geld het voor alle bestanden in die map.
Ah oke, ik snap wat je bedoelt. Maar als dus ineens je htaccess niet meer zou werken (vraag me niet waarom...) dan ben je dus wel heel erg de pineut... dan kan iedereen bij je foto's.
Ben je een porno site aan het bouwen met beveiligde content? ;)
hahaha... lol
(maar zonder gekheid, het schijnt uit veiligheidoverwegingen wel beter te zijn om zoveel mogelijk bestanden buiten je www map te zetten. Normale foto's kun je prima op jouw manier beveiligen, maar ik kan me voorstellen dat professionele sites a la facebook, hyves en dergelijke foto's toch echt buiten de www map opslaan. Of denk jij van niet?)
Die manier die ik je zojuist liet zien, is zeker een veilige manier, al zou ik voor READFILE nog wel het absolute interne path naar de map images neerzetten.
Verder vraag ik me af hoe het zit met 'Bestanden buiten je WWW zetten?'.
Betekend dit je de openbase_dir restrictie uit moet zetten?
1.) Gaat dit niet ten koste gaat van de snelheid?
2.) Bij slechte / geen configuratie in combinatie met 0777 chmod bestanden, er toegang tot je systeem mogelijk is?
Wat betreft jouw vragen weet ik het antwoord niet, dat is me net even te technisch. Maar het snelheidsaspect daar zet ik ook wel m'n vraagtekens bij als het gaat om mediabestanden zoals foto's, filmpjes etc. Wordt het dan niet heel traag allemaal? (met name bij filmpjes)
Hoe kijken andere leden hier tegenaan? Wat zouden jullie doen? Privé foto's in een publieke map zetten en vertrouwen op de .htaccess beveiliging? Of alles buiten de WWW map zetten?
Overigens weet ik dat niet alle Windows servers standaard htaccess ondersteunen. Stel dat je host ineens besluit om over te stappen op Windows (oke, dat zou natuurlijk heeeeel raar zijn als dat onaangekondigd gebeurt) dan zou je in de problemen kunnen komen omdat je htaccess ineens niet meer werkt. Dat zou een reden kunnen zijn om zoveel mogeljk (media)bestanden buiten de WWW map te houden. Maar, goed... wat vinden andere leden. Daar ben ik wel benieuwd naar.
Base_dir_restriction moet juist goed geconfigureerd worden. Zo zou je eigenlijk wel een level hoger dan de webroot mogen komen, maar niet verder...
Ozzie PHP op 14/06/2011 01:34:33:
Overigens weet ik dat niet alle Windows servers standaard htaccess ondersteunen. Stel dat je host ineens besluit om over te stappen op Windows (oke, dat zou natuurlijk heeeeel raar zijn als dat onaangekondigd gebeurt) dan zou je in de problemen kunnen komen omdat je htaccess ineens niet meer werkt. Dat zou een reden kunnen zijn om zoveel mogeljk (media)bestanden buiten de WWW map te houden. Maar, goed... wat vinden andere leden. Daar ben ik wel benieuwd naar.
Ten eerste zou ik het een hele rare host vinden. Ook overbodig moeilijk, want een server zet je niet zomaar even over te zetten.
Begrijp me niet verkeerd, een server moet je goed beveiligen, maar af en toe is een een beetje paranoia wat betreft de veiligheid van een server.
Je moet het zo zien.
Als je op vakantie gaat, en je laat de deur wagenwijd open voor inbrekers, terwijl je het geld op de keukentafel legt, moet je niet gek opkijken als er ingebroken wordt.
Echter, een normaal persoon zou z'n deur op slot doen. Indien aanwezig het alarm erop. Het geld opbergen, indien aanwezig in een kluis. Een cijfercombinatie waar je u tegen zegt.
Je geld is dan veilig, maar dan nog bestaat er een minimale kans dat het gestolen wordt. Moet je dan nog meer beveilingsmaatregelen treffen (buiten je geld naar de bank brengen)?
Wat als bijvoorbeeld op een dag plotseling het alarm het niet meer doet?
Uiteindelijk heb je zo veel scenario's, de vraag is alleen: Met welke hou ik rekening.
- Aar - op 14/06/2011 07:47:35:
Base_dir_restriction moet juist goed geconfigureerd worden. Zo zou je eigenlijk wel een level hoger dan de webroot mogen komen, maar niet verder...
Dus laat je Apache in een 'jail' draaien en dan heb je dat.
- SanThe - op 14/06/2011 09:43:12:
Dus laat je Apache in een 'jail' draaien en dan heb je dat.
- Aar - op 14/06/2011 07:47:35:
Base_dir_restriction moet juist goed geconfigureerd worden. Zo zou je eigenlijk wel een level hoger dan de webroot mogen komen, maar niet verder...
Dus laat je Apache in een 'jail' draaien en dan heb je dat.
Je bedoelt dus draaien onder de juiste 'username' van de gebruiker, zoals bijv. 'aar' ? Dat is wat ik dus doe.... :-)
Gewijzigd op 14/06/2011 10:19:11 door - Ariën -