directe link naar images blokkeren

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tortuga web

tortuga web

25/01/2016 17:02:04
Quote Anchor link
In een website heb ik een fotoalbum waarbij de foto´s via het php-script getoond worden.
nou is het ook mogelijk dat de foto benaderd wordt door de directe link als url op te geven, maar ik wil dat er dan een forbidden melding komt. Hoe doe ik dat?
De image-bestanden staan in deze structuur:
mijndomein.nl/albums/album1/foto1.jpg
Dus alles in submappen in /albums/
 
PHP hulp

PHP hulp

19/04/2024 18:07:48
 
- Ariën  -
Beheerder

- Ariën -

25/01/2016 17:04:14
Quote Anchor link
deny from all in .htaccess
Gewijzigd op 25/01/2016 17:04:35 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

25/01/2016 17:14:24
Quote Anchor link
Of je mappen buiten je webdir zetten als deze afbeeldingen toch via een script geserveerd worden.
 
Ben van Velzen

Ben van Velzen

25/01/2016 17:14:30
Quote Anchor link
Dat lijkt me een beetje kort door de bocht. Wat je tegen hotlinking kunt doen is iets als het volgende in .htaccess:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?example.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]

Als je een lege referrer wilt toestaan kun je regel 2 weg laten.
 
Tortuga web

tortuga web

25/01/2016 17:17:29
Quote Anchor link
@Ariën: Nee, want dan krijgt het script ook geen toegang.
Ik begrijp nog steeds niet volledig hoe dat werkt met htaccess, want met deny from all, kan ik wel voorkomen dat er een directe link naar php-bestanden gemaakt wordt, maar niet naar een jpg file. Ook bv. een css bestand wordt niet uitgevoerd door het script als ik deny from all zet. (de css wordt via de head geladen)
En ik zou graag de map buiten de root plaatsen, maar de host staat dit niet toe.

Toevoeging op 25/01/2016 17:26:13:

@Ben: Ik heb deze regels in de .htaccess in de map albums toegevoegd, maar dat voorkomt nit dat ik de afbeelding rechtstreeks kan openen.
Gewijzigd op 25/01/2016 17:19:08 door tortuga web
 
- Ariën  -
Beheerder

- Ariën -

25/01/2016 17:28:02
Quote Anchor link
Tortuga web op 25/01/2016 17:17:29:
@Ariën: Nee, want dan krijgt het script ook geen toegang.

Niet waar. Via PHP wordt de foto via het filesystem opgevraagd, en het gaat dus niet via de webserver. Je kan die .htaccess toch in de map zetten waar de foto's in staan?
Ik neem aan dat er geen andere bestanden instaan die je niet geblokkeerd wilt hebben.

Welke webserver gebruik je eigenlijk?
Gewijzigd op 25/01/2016 17:30:31 door - Ariën -
 
Tortuga web

tortuga web

25/01/2016 17:39:38
Quote Anchor link
@Ariën: Ik zet de .htaccess in de map met de foto´s. In de .htaccess staat dit:
<files *.*>
order allow,deny
deny from all
</files>
En vervolgens ga ik naar de webpagina, roep de albums aan en zie vervolgens alles behalve de foto´s waar die er eerst wel waren. Wat doe ik dan niet goed.
Ik test met Wampserver

En om het nog erger te maken: via het script kom ik niet bij de images, maar via de directe link wel
Gewijzigd op 25/01/2016 17:44:05 door tortuga web
 
- Ariën  -
Beheerder

- Ariën -

25/01/2016 17:45:06
Quote Anchor link
deny from all alleen al, zou moeten werken. Desnoods kan je er met .htaccess een wachtwoord op gooien als dat niet werkt.
 
Tortuga web

tortuga web

25/01/2016 18:06:17
Quote Anchor link
Ik krijg het niet voor elkaar.
Met deny from all worden de images ook door het script geblocked.
Met een htpassword, dit heb ik op de hostserver getest niet in wamp, worden de images ook geblocked.
Is er geen andere methode?
 
- Ariën  -
Beheerder

- Ariën -

25/01/2016 18:20:12
Quote Anchor link
Staan de images op dezelfde server als die van het script? En hoe haal je de images op in het script? Daar zit de fout, vermoed ik.
Gewijzigd op 25/01/2016 18:20:31 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

25/01/2016 18:26:10
Quote Anchor link
Quote:
Dat lijkt me een beetje kort door de bocht.

Hangt van het script af, als hier verder geen authenticatie checks of wat dan ook in zitten is dit script enkel een doorgeefluik.

Ook heeft de TS niet aangegeven dat het probleem hotlinking betreft, enkel dat de afbeeldingen niet rechtstreeks aangeroepen mogen worden.
 
Tortuga web

tortuga web

25/01/2016 18:28:42
Quote Anchor link
De images staan op dezelfde server. Zoals gezegd, ik kan alleen maar bestanden en submappen in de root van het domein zetten, bij deze hoster. In de Wampomgeving heb ik alles in dezelfde structuur als bij de host.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php    
if (!$bestanden = glob($map.'/*.*')) {
        $bestanden = array();
    }

    foreach ($bestanden as $bestand) {
        if (($bestand !== $map.'/.') AND ($bestand!== $map.'/..')) {
            $gegevens = getimagesize($bestand);
            $extensie = $gegevens['mime'];
            if ($extensie == 'image/jpeg' || $extensie == 'image/gif' || $extensie == 'image/png') {
                $afbeeldingen[] = $bestand;
            }
        }
    }

    $aantalfotos = count($afbeeldingen);
    if (isset ($afbeelding)) {
        foreach ($afbeeldingen as $id => $naam) {
            if (basename($naam) == $afbeelding) {
                $fotonr = $id;
            }
        }

        if (isset ($fotonr)) {
            $afbeelding = pathinfo($afbeeldingen[$fotonr]);
            if ($fotonr > 0) {
                $vorige_afbeelding = pathinfo($afbeeldingen[$fotonr - 1]);
                echo '<a href="?pagina=fotoalbum&amp;album='.$map.'&amp;afbeelding='.$vorige_afbeelding['basename'].'" title="Ga naar foto '.$vorige_afbeelding['basename'].'">&lt;&lt; Vorige</a>';
            }

?>

O.a. met bovenstaande haal ik foto´s op. De basis van dit script heb ik van een tutorial van phphulp
Gewijzigd op 25/01/2016 18:31:20 door tortuga web
 
- Ariën  -
Beheerder

- Ariën -

25/01/2016 18:34:22
Quote Anchor link
Dit gaat via het filesystem. Ik kan me niet indenken dat een .htaccess een blokkade vormt.

Kan je met readfile() wel in je beveiligde directory komen?
Gewijzigd op 25/01/2016 18:35:57 door - Ariën -
 
Tortuga web

tortuga web

25/01/2016 19:00:15
Quote Anchor link
Ja, dat lukt wel
 
- Ariën  -
Beheerder

- Ariën -

25/01/2016 19:06:16
Quote Anchor link
Dan gok ik dat je maar een deel van de code liet zien, en de afbeelding gewoon via een img-tag in HTML opende. En die requests gaan dan uiteraard via de webserver.

Met readfile() kan je prima de afbeeldingen via PHP inladen. Let er wel op dat je juiste headers meegeeft.
 
Tortuga web

tortuga web

25/01/2016 19:11:20
Quote Anchor link
Ariën, je hebt helemaal gelijk. Ik ga het script aanpassen en readfile() gebruiken. Tenminste, ik hoop dat ik daar uitkom, heb dat nog nooit bij de hand gehad.
Toevallig een tip (van de sluier) :)?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.