Laat php toe een beveiligde directory te gebruiken

Status
Niet open voor verdere reacties.

krizzy

Gebruiker
Lid geworden
17 dec 2006
Berichten
171
Hallo,

Ik heb dus het volgende probleem, ik heb mijn map met afbeelfdingen beveiligd met een htaccess bestand. maar het probleem is dat de afbeeldingen op mijn pagina ook niet te zien zijn. Ik heb al geprobeerd met php, maar dit lukt niet... Terwijl ik denk dat dit wel met php kan...
Weet er iemand hier iets voor ?

Bedankt !
Groetjes Kriz
 
Ik denk eerder dat je het pad naar de images niet helemaal goed hebt.
 
toch wel hoor, als ik de beveiliging weghaal, zie ik de afbeeldingen, dus het pad is goed ;)
 
Waarom heb je je map met images beveiligd met een .htaccess? Dan kunnen gebruikers de images inderdaad niet zien. En als je ze vervolgens met PHP ophaalt kun je net zo goed de map vrij geven, gezien de images dan toch toegankelijk zijn voor de gebruiker.
 
nee, want je moet ingelogd zijn om die afbeeldingen te mogen zien op de pagina... daaroom heb ik de map zelf ook beveiligd, omdat anders mensen de afbeeldingen toch kunnen zien
 
waarom gebruik je niet chmod? dan kun je de rechten zo zetten dat alleen de sever de bestanden kan gebruiken!
 
Als je niet wil dat mensen die niet ingelogd zijn er bij kunnen, kun je het beste de afbeeldingen buiten de www map zetten (zodat niemand er bij kan van buitenaf) en de images openen met een php script, dan kun je daar een controle inbouwen of ze ingelogd zijn.

Dus je linkt naar je image op deze manier:

HTML:
<img src="imageloader.php?img=some_image.jpg" />

En dan maak je imageloader op deze manier:

PHP:
// controleer of de user ingelogd is; zul je zelf moeten doen gebaseerd op hoe je inlog systeem werkt

// link naar het plaatje in een map buiten de www folder
$image = imagecreatefromjpeg( '../../image_folder/' . $_GET['img'] . '.jpg' );

// een header die aangeeft dat dit script een jpeg image output en geen tekst
header('Content-Type: image/jpeg');

// stuur het plaatje naar de browser
imagejpg( $image );

Zorg dat je zelf nog even een controle inbouwt of het plaatje wel bestaat en je zult het enigsinds uit moeten breiden als je verschillende filetypes hebt, maar het principe is hetzelfde. Je gebruikt createimgfrom<filetype> om het plaatje in te laden, dan stuur je een header met het type plaatje, en daarna stuur je de inhoud naar de browser. Het zou kunnen dat je ook rechtstreeks file_get_contents kunt doen ipv imgcreate en dan image, maar dat weet ik niet 100% zeker en kan ik het nu even niet testen.

Let op dat je dit script niet kunt debuggen tenzij je de header tijdelijk uitzet en het rechtstreeks aanroept en dat er absoluut geen notices, warnings, of andere output in mag zitten want dan zie je alleen een "broken image" plaatje in de browser. Hij mag alleen de image outputten.
 
Bij mijn host heb ik enkel toegang tot de www map, dus kan ik buiten deze map niets plaatsen.
Iemand een ander idee ?

maar jouw gedacht had ik eerst ook ;)
 
Laatst bewerkt:
In theorie werkt mijn idee ook als het in een .htaccess beveiligde map staat want PHP zou daar geen problemen mee moeten hebben.

Maar wel vreemd dat je provider je geen toegang geeft buiten de www map.
 
tjah, het is zo :(
maar ik ga nog eens proberen met htaccess...

Welke methode is de beste ?
Toegang tot de map weigeren, OF Toegang met wachtwoord versleutelen ?
 
Als je niet wil dat mensen er bij kunnen moet je gewoon de toegang weigeren.
 
Als je niet wil dat mensen die niet ingelogd zijn er bij kunnen, kun je het beste de afbeeldingen buiten de www map zetten (zodat niemand er bij kan van buitenaf) en de images openen met een php script, dan kun je daar een controle inbouwen of ze ingelogd zijn.

....

Dan kan iemand die een bepaald image dat gebruikt wordt op de site, het nog steeds downloaden, door gewoon die url te gebruiken.

IPV met .htaccess een beveiliging op zetten, zou je ook een index.php met een redirect naar / in de relevante directories kunnen zetten.
Op die manier disable je de apache directory listing, en kunnen mensen niet met wget je site leegtrekken..
 
Je kunt een image die gebruikt wordt op een site altijd downloaden, daar doe je niks tegen. Wat hij wil is dat alleen ingelogde gebruikers een plaatje kunnen downloaden en dat kun je met een php script regelen door het plaatje gewoon niet weer te geven als je niet ingelogd bent.

En zo'n script kun je ook niet wgetten, want je moet de filename in de query string zetten en die heb je niet.
 
het probleem is dat ik zelf zonder controle van inlog, ik geen afbeelding te zien krijg op de php, met de htaccess beveiliging...
 
Dat zou niet aan de .htaccess moeten liggen, die hoort geen verzoeken van de server zelf te blokkeren. (Anders zou je namelijk nooit de files binnen een .htaccess kunnen benaderen)

Waarschijnlijk gaat er iets mis met je script zelf.
 
ok, dit is gelukt. Maar nu krijg ik de controle van mijn inlogscript er niet bij
 
het script zou eigenlijk een andere foto moeten weergeven als de gebruiker niet is ingelogd
 
Dat kan, dan moet je als de gebruiker niet ingelogd is ook een plaatje outputten, maar dan een andere ;)

Ik weet niet wat het script nu doet bij een niet ingelogde user, maar op die plek moet je je standaard plaatje eruit sturen.
 
dit is mijn code...
PHP:
<?php 


header("Content-type: image/jpeg");
$image=imagecreatefromjpeg("img/" . $_GET['img']);
imagejpeg($image); 
  ?>
maar als ik if gebruik, werkt hij helemaal niet
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan