Avatar billede lojmann Nybegynder
21. juli 2008 - 20:21 Der er 11 kommentarer og
1 løsning

Hente side/billede på web-server uden at sende referrer med

Hej,

Jeg sidder med en lille sjov opgave. Jeg har brug for at kunne requeste et billede på min test-server via PHP.

Det er nemt nok, med f.eks. denne kode får jeg hentet URL'en frem og kan så vise billedet med et <img...>-tag.

$source = file_get_contents("http://testserver");      preg_match('/stuff\/(.+\.png)/i',$source,$result);

Men, jeg har sat min web-server op til, at hvis andre prøver at linke direkte til mit billede, så vises det originale billede ikke, men et der skriver man ikke har adgang til det.

Når man så skriver den direkte URL i adresse-linien i en browser, så kan man godt se det enkelte billede.
Jeg vil derfor gerne prøve, at requeste billedet uden at sende referer via PHP for at se om det så virker.

Er der nogle, der har en ide til hvordan man kan det og om det overhovedet kan lade sig gøre?

Venlig hilsen,

Thomas
Avatar billede coderdk Praktikant
21. juli 2008 - 20:24 #1
<?php

header("Content-Type: image/png");
echo file_get_contents("http://testserver.dk/billede.png");

?>
Avatar billede olebole Juniormester
22. juli 2008 - 01:22 #2
<ole>

Referer feltet i HTTP-header'en må du aldrig stole på. Den _kan_ indholde navnet på siden, der request'er - men behøver ikke gøre det. Filtrerer du på baggrund af det felt, kan du meget vel frasortere en masse, du ikke ønsker at frasortere

/mvh
</bole>
Avatar billede thesurfer Nybegynder
22. juli 2008 - 06:48 #3
Det er typisk en dårlig ide at basere noget på referrer, med mindre at det er begrænsninger.

Eksempel:
- dårlig ide: referrer-baseret "gå tilbage knap", eller redirect til referrer
- ok/god ide: begrænsning af load/download billeder/filer (f.eks. større filer) fra eksterne kilder

Begrænsning gør, at man ikke kan linke direkte til dine billeder fra andre websider, i IMG-tags. Det betyder at din båndbredde ikke bliver brugt på billederne, når folk ikke engang er på din webside.
Avatar billede lojmann Nybegynder
22. juli 2008 - 22:25 #4
Jeg mener ikke at det er en god ide at beskytte billeder via referrer (som thesurfer skriver), og det er netop det jeg ønsker at teste af her.
Avatar billede thesurfer Nybegynder
23. juli 2008 - 01:20 #5
- Hvis det absolute skal være i PHP, dvs. testen går ud på at teste PHP kode, og ikke direkte funktionaliteten af blokering på manglende referrer, kan jeg nok ikke hjælpe dig.

- Hvis det er funktionaliteten, og ikke direkte PHP kode, du ønsker at teste, kan man f.eks. i browseren Opera trykke på F12, og fravælge "Send Referrer Information".


Så hvad er det du vil du teste?

1) PHP kode

2) Funktionalitet/blokering ved manglende referrer data (kan gøres via browseren Opera og andre)
Avatar billede lojmann Nybegynder
23. juli 2008 - 09:14 #6
Det er PHP koden jeg vil teste, da man kan kalde filen ved direkte link i en browser (så er der heller ingen referer) og så ser man filen...

Jeg ønsker at vise, at man via PHP (da det er det jeg kan afvikle på en test-server) kan hente det 'beskyttet materiale', uden at den som skal se det skal lave en masse krumspring...

/Thomas
Avatar billede coderdk Praktikant
23. juli 2008 - 09:42 #7
Men var det jeg skrev ikke det, du ville? Eller ville du "rippe" en masse billeder på én gang? For du kan jo i dit <img>-tag kalde et script som det jeg skriver - så kommer der ikke referrer med ;P
Avatar billede lojmann Nybegynder
23. juli 2008 - 10:32 #8
Koden jeg har nu, henter en HTML fil ned og finder nogle image-ref og skal så vise de billeder på min egen PHP side.

Det som jeg ikke kan pt. er at vise billedet, da referer informationen sendes med og mit request derfor blokeres.

Jeg har brug for at kunne fuske med HTTP headeren og fjerne/ændre referer informationen for at kunne vise billedet på min egen test-side.

Hvis du har et script der kan det, må du gerne poste/linke til det her. Måske det kan bruges, alligevel...(Selvom det ikke er PHP)
Avatar billede coderdk Praktikant
23. juli 2008 - 10:44 #9
Du kan gøre det jeg skriver - du henter først din HTML side, og preg'er alle billeder ud, så erstatter du dem med:

echo '<img src="getimage.php?url=' . urlencode( $url_til_billedet ) . '">';

getimage.php er så:

<?php

echo file_get_contents( $_GET['url'] );

?>

evt snif extension'en og send den korrekte header...
Avatar billede coderdk Praktikant
23. juli 2008 - 10:44 #10
(med den korrekte header, mener jeg content-type)
Avatar billede lojmann Nybegynder
23. juli 2008 - 14:21 #11
Virker! Hvorfor prøvede jeg ikke det?! Jeg har bare lavet et image-tag på en side som så refererede til billedet med samme resultat = ingen adgang!

Det her virker, stærkt... Hvorfor tænkte jeg ikke på den!

Post endelig et svar coderdk, så deler jeg point ud :)
Avatar billede coderdk Praktikant
23. juli 2008 - 14:30 #12
Aight :)
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