[PHP] Fopen icm met hotlink protectie

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • FireFoz
  • Registratie: Juni 2001
  • Laatst online: 18-06 08:40
Ik ben een script aan het maken dat foto's van een bepaalde url download en lokaal opslaat. Nou is dit geen probleem; ik heb een scriptje gemaakt dat dmv een reguliere expressie de foto's uit de html haalt en de locaties hier van terug geeft.

Werkt allemaal goed. MAAAAAaar op het moment dat er in die directory een htaccess file staat waarin staat dat de bestanden die in die directory staan alleen van dat domein af mogen worden aangeroepen worden, dan werkt het niet meer (logisch).

Voorbeeld:

index.html
foto's staan in /images

/images/*.* mag dus alleen aangeroepen worden als je hem via index.html laadt.


Ik heb het getest met een script van iemand anders (cgi), en daarbij werkt het wel. Ik heb geen idee hoe ie dat gemaakt heeft :?

Het enige wat ik kan bedenken is op de een of andere manier heel index.html downloaden inclusief die foto's..net zoals een browser. Maar hoe doe je dat in godsnaam met php, aangezien je met fopen alleen de html krijgt (logisch).

Weet iemand hoe dit kan (of een andere oplossing)?


ps - ik heb het recht van de eigenaar van de foto's om die foto's te downloaden en op mijn server op te slaan, het is dus niet zo dat ik onrechtmatig die hotlink-protectie probeer te omzeilen :)
ps2 - hotlink protectie verwijderen is geen optie

Leef lekker in het nu, er is niks anders


Acties:
  • 0 Henk 'm!

Verwijderd

[TOPIC=374601////fopen%2Chtaccess]

Acties:
  • 0 Henk 'm!

  • FireFoz
  • Registratie: Juni 2001
  • Laatst online: 18-06 08:40
Verwijderd schreef op dinsdag 23 november 2004 @ 12:59:
[TOPIC=374601////fopen%2Chtaccess]
De urls die ik je via icq stuur die heb ik zelf ook al wel gelezen hoor, maar daar ben ik idd al mee bezig :Y)

Leef lekker in het nu, er is niks anders


Acties:
  • 0 Henk 'm!

Verwijderd

FireFoz schreef op dinsdag 23 november 2004 @ 13:03:
[...]


De urls die je via icq stuur die heb ik zelf ook al wel gelezen hoor, maar daar ben ik idd al mee bezig :Y)
icq?

Acties:
  • 0 Henk 'm!

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 16:14

pietje63

RTFM

Hmm, ik zit te denken aan wat "vieze" workarounds

- via ftp de foto's ophalen (als je toch de rechten van de webmaster hebt...)
- als je de server zelf beheert/ niet zwaar belast: op de server zelf een browser openen met daarin de index.html en vervolgens de foto's uit die cache halen

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
Stuur een referer veld mee, met daarin de url van de oorspronkelijke site.

Acties:
  • 0 Henk 'm!

  • FireFoz
  • Registratie: Juni 2001
  • Laatst online: 18-06 08:40
Ik ben nu een heel eind, maar heb nog steeds een probleempje. Ik ben nu zo ver dat ik de foto kan openen en lokaal opslaan als binary. Deze foto kan ik vervolgens prima met ACDsee bekijken, maar niet met internet explorer of firefox. als ik de foto open, zie ik dat er boven aan headers staan:


code:
1
2
3
4
5
6
7
8
9
10
11
Content-type: image/jpeg
HTTP/1.1 200 OK
Date: Tue, 23 Nov 2004 21:21:44 GMT
Server: Apache/2.0.49 (Unix) PHP/4.3.6
Last-Modified: Tue, 27 Jul 2004 06:38:46 GMT
ETag: "6462c6-14cdb-5a768980"
Accept-Ranges: bytes
Content-Length: 85211
Connection: close
Content-Type: image/jpeg
**en dan hier de echte foto inhoud,rare tekens dus**


Dit hoort niet volgensmij. ACDSee leest hier dus gewoon overheen maar IE en firefox niet. Hoe kan ik dit nou voorkomen? Ik snap dat het hier door komt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    $out = "GET $file HTTP/1.0\r\n";
    $out .= "Host: $host:80\r\n";
    $out .= "User-Agent: Mozilla\r\n";
    $out .= "Referer: $referer\r\n";
    $out .= "Cache-Control: max-age=0\n\n";
    
    fputs($fp,"$out");
    while (!feof($fp))
    {
        $image .= fgets($fp, 128);
    }
    
    $file = "$site_path" .  "test.jpg";

    $fp = fopen("$file", "wb");
    fwrite($fp,$image);
    fclose($fp);


Maar dat doe ik er aan? Ik kan niet met fopen werken, dus moet wel met fsocketopen, maar dan zit ik weer met die headers 8)7

Leef lekker in het nu, er is niks anders


Acties:
  • 0 Henk 'm!

  • kippetje01
  • Registratie: November 2001
  • Laatst online: 18-08 14:21
Je zou de waardeloze data kunnen negeren.
Je zet nu alles in een variable, als je die variable in een array omzet d.m.v.
code:
1
$array = explode("\n",$variable);
nu kun je natuurlijk door die array heenlopen en alleen de nuttige regel gebruiken (die met het plaatje)

[ Voor 4% gewijzigd door kippetje01 op 23-11-2004 15:41 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Tussen de header en de body zit een lege regel.

Alles tot en met die lege regel weg gooien en de rest als het plaatje opslaan.

Acties:
  • 0 Henk 'm!

  • FireFoz
  • Registratie: Juni 2001
  • Laatst online: 18-06 08:40
kippetje01 schreef op dinsdag 23 november 2004 @ 15:40:
Je zou de waardeloze data kunnen negeren.
Je zet nu alles in een variable, als je die variable in een array omzet d.m.v.
code:
1
$array = explode("\n",$variable);
nu kun je natuurlijk door die array heenlopen en alleen de nuttige regel gebruiken (die met het plaatje)
Daar had ik al aan gedacht, maar wist dus niet hoe ik verschil kon zien tussen de foto en de header... maar...
Verwijderd schreef op dinsdag 23 november 2004 @ 15:41:
Tussen de header en de body zit een lege regel.

Alles tot en met die lege regel weg gooien en de rest als het plaatje opslaan.
Daar aan had ik nog niet gedacht :7
Ff proberen :)


*edit* gelukt, tnx _/-\o_

[ Voor 3% gewijzigd door FireFoz op 23-11-2004 16:50 ]

Leef lekker in het nu, er is niks anders

Pagina: 1