Avatar billede angelenglen Nybegynder
19. februar 2004 - 11:37 Der er 16 kommentarer og
1 løsning

bloker link fra andre sider.

Jeg har en side, hvor folk kan uploade billeder til...
men jeg vil gerne have lavet det sådan, at man ikke kan linke til disse billeder fra andre sider... hvordan kan det laves?
(folk misbruger mit upload-plads til at hoste billeder til andre sider.)
Avatar billede sone Nybegynder
19. februar 2004 - 11:40 #1
Du kan ligge dem i et beskyttet underkatalog og lave et php-script som proxy.
A'la: proxy.php?fil=billede.jpg

proxy.php kan så lave div. check inden billedet sendes videre (på HTTP_REFERER osv.)
Avatar billede schaefner Juniormester
19. februar 2004 - 11:43 #2
Eller måske: http://mbn.dk/?aid=47&lang=dk

Du skal bare være opmærksom på at ikke alle browsere,firewalls etc. sender en HTTP_REFERER, så du kan godt risikere at den er tom selvom de rent faktisk kommer fra din side.

mvh. Jesper Sørensen
Avatar billede angelenglen Nybegynder
19. februar 2004 - 11:48 #3
Stone:
okay måske skulle jeg have beskrevet bedere, men desværre kan jeg ikke bruge din løsning, da jeg ikke ønsker at ødelægge eksisterende links på min egen side.

Schaefner:
Checker lige det ud du linkede til...
Avatar billede angelenglen Nybegynder
19. februar 2004 - 12:34 #4
hmm jeg kan ikke få det til at virke:
her er det jeg har lavet indtil nu:
http://www.psycotics.dk/psycotics/upload/files/cwd.php


------[ .htaccess ]------
Action php-img-parser /web/www.psycotics.dk/www/psycotics/upload/files/show_img.php

<FilesMatch ".*.(jpe?g|png|gif)$">
    SetHandler php-img-parser
</FilesMatch>

IndexIgnore not_allowed.gif show_img.php picture_not_found.jpg


------[ show_img.php ]------
<?php

    $img = array_pop(explode("/", $_SERVER['PATH_INFO']));

    $content_types['jpeg'] = "image/jpeg";
    $content_types['jpg']  = "image/jpeg";
    $content_types['gif']  = "image/gif";
    $content_types['png']  = "image/png";

    if (file_exists("./".$img)) {       
        $url_ref = parse_url($_SERVER['HTTP_REFERER']);

        if ($url_ref[host] == $_SERVER['HTTP_HOST']) {
            header("Content-Type: ".$content_types[array_pop(explode(".", $img))]);
            readfile($img);
        }
        else {
            header("Content-Type: ".$content_types['gif']);
            readfile("not_allowed.gif");
        }
    }

    else {
            header("Content-Type: ".$content_types['jpg']);
            readfile("picture_not_found.jpg");
    }

?>



-selve upload-siden:
http://www.psycotics.dk/psycotics/upload
-fil på en anden server der linker til billed på psycotics.dk:
http://www.thesprit.dk/test.html

hvad gør jeg forkert?
Avatar billede angelenglen Nybegynder
19. februar 2004 - 12:34 #5
Avatar billede angelenglen Nybegynder
19. februar 2004 - 12:38 #6
hmm faktisk tror jeg at den blokerer ALLE sider lige nu.... også psycotics.dk ... og det er jo ikke meningen :(
Avatar billede angelenglen Nybegynder
19. februar 2004 - 12:44 #7
hmmmm
-----[ test.php ]-----
<?
        $url_ref = parse_url($_SERVER['HTTP_REFERER']);

echo "$url_ref[host]:<br>\n<b>";
echo $url_ref[host];
echo "</b><br>\n$_SERVER['HTTP_HOST']:<br>\n<b>";
echo $_SERVER['HTTP_HOST'];
?>

resultat:
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in /web/www.psycotics.dk/www/psycotics/upload/files/test.php on line 4
Avatar billede angelenglen Nybegynder
19. februar 2004 - 12:49 #8
-----[ test3.php ]-----
<?
$url_ref = parse_url($_SERVER['HTTP_REFERER']);
echo "url_ref:<br>\n<b>";
echo $url_ref[host];
echo "</b><br>\nSERVER['HTTP_HOST']:<br>\n<b>";
echo $_SERVER['HTTP_HOST'];
?>
url_ref:

SERVER['HTTP_HOST']:
www.psycotics.dk



-ser ud til at
"echo $url_ref[host];" ikke virker?
Avatar billede schaefner Juniormester
19. februar 2004 - 14:44 #9
Har du prøvet at udskrive $_SERVER['HTTP_REFERER'] og se om den er tom?
Avatar billede angelenglen Nybegynder
19. februar 2004 - 15:14 #10
hvis jeg laver en fil med:
<?
echo $_SERVER['HTTP_REFERER'];
?>
skriver den intet på browseren.

hvis det er det du mener?
Avatar billede angelenglen Nybegynder
19. februar 2004 - 15:15 #11
måske er problemet lidt, at der jo ofte ikke desideret bliver linket, i form af clickable links, til filerne - men istedet bliver linket til filerne på den måde at de bliver brugt direkte på siden - vil det gøre en forskel, eller er det ligemeget?
Avatar billede schaefner Juniormester
19. februar 2004 - 15:32 #12
den forstod jeg ikke helt
Avatar billede schaefner Juniormester
19. februar 2004 - 15:38 #13
<?php
$img = array_pop(explode('/',$_SERVER['PATH_INFO']));
$content_types['jpeg'] = 'image/jpeg';
$content_types['jpg']  = 'image/jpeg';
$content_types['gif']  = 'image/gif';
$content_types['png']  = 'image/png';

if (file_exists('./'.$img)) {     
    $url_ref = parse_url($_SERVER['HTTP_REFERER']);
    if ($url_ref['host'] == $_SERVER['HTTP_HOST'] || empty($_SERVER['HTTP_HOST'])) {
        header("Content-Type: ".$content_types[array_pop(explode('.', $img))]);
        readfile($img);
    } else {
        header("Content-Type: ".$content_types['gif']);
        readfile("not_allowed.gif");
    }
} else {
    header("Content-Type: ".$content_types['jpg']);
    readfile("picture_not_found.jpg");
}
?>

Så burde den vise billedet hvis HTTP_REFERER er tom.
Avatar billede angelenglen Nybegynder
19. februar 2004 - 15:46 #14
hmm jeg har på fornemmelsen at min skoles cache fucket mine forsøg op, jeg jeg venter lige med at eksperimentere mere indtil jeg kommer hjem om cirka 30 minutter.
Avatar billede angelenglen Nybegynder
20. februar 2004 - 00:28 #15
hmm umiddelbart tror jeg at det ikke er show_img.php filen der er problemet, men derimod .htaccess filen.

hvis jeg lader .htaccess have følgende indhold:
----------------------------
Action php-img-parser /web/www.psycotics.dk/www/psycotics/upload/files/show_img.php

<FilesMatch ".*.(jpe?g|png|gif)$">
    SetHandler php-img-parser
</FilesMatch>

IndexIgnore not_allowed.gif show_img.php picture_not_found.jpg
----------------------------

og show_imh.php have følgende indhold:
----------------------------
<?php
$img = array_pop(explode('/',$_SERVER['PATH_INFO']));
$content_types['jpeg'] = 'image/jpeg';
$content_types['jpg']  = 'image/jpeg';
$content_types['gif']  = 'image/gif';
$content_types['png']  = 'image/png';
header("Content-Type: ".$content_types[array_pop(explode('.', $img))]);
readfile($img);
?>
----------------------------

-så virker det stadig ikke - og den show_img.php ovenover burde vel vise billedet ligemeget hvad, komplet ukritisk?
Avatar billede angelenglen Nybegynder
20. februar 2004 - 00:39 #16
jeg har også fundet en anden fejl:
den ser ikke ud til at være case insensitive på extension - hvordan får man den til det?
-for følgende billed er upåvirket af scriptet:
http://www.psycotics.dk/psycotics/upload/files/bobsled2.JPG
-og følgende ER påvirket af scriptet...
http://www.psycotics.dk/psycotics/upload/files/bobled1.jpg
Avatar billede angelenglen Nybegynder
16. marts 2004 - 09:02 #17
kan ikke få det til at virke :(

lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester