|
| Content-type Fra : Kasper Lindberg |
Dato : 03-01-08 11:47 |
|
Hej Ng,
Jeg prøver at password-beskytte en række almindelige filer (doc/xls/txt
.... ).
Filen skrives til klienten vha. "readfile(...)".
Jeg mangler dog at sætte den korrekte content-type. Spørgsmålet er, om det
er muligt at læse den content-type som serveren ville sende, for en given
fil, og så sende denne, i stedet for at afgøre content-type på baggrund af
fil-endelsen og en switch-statement.
--
På forhånd tak
Kasper
| |
Martin (03-01-2008)
| Kommentar Fra : Martin |
Dato : 03-01-08 14:31 |
|
Kasper Lindberg wrote:
> Hej Ng,
>
> Jeg prøver at password-beskytte en række almindelige filer (doc/xls/txt
> ... ).
>
> Filen skrives til klienten vha. "readfile(...)".
>
> Jeg mangler dog at sætte den korrekte content-type. Spørgsmålet er, om det
> er muligt at læse den content-type som serveren ville sende, for en given
> fil, og så sende denne, i stedet for at afgøre content-type på baggrund af
> fil-endelsen og en switch-statement.
< http://de.php.net/manual/en/function.finfo-file.php>
| |
Kasper Lindberg (03-01-2008)
| Kommentar Fra : Kasper Lindberg |
Dato : 03-01-08 15:03 |
|
"Martin" <maaNO@SPAMscandesigns.dk> wrote in message
news:477ce34e$0$90272$14726298@news.sunsite.dk...
> Kasper Lindberg wrote:
>> Hej Ng,
>>
>> Jeg prøver at password-beskytte en række almindelige filer (doc/xls/txt
>> ... ).
>>
>> Filen skrives til klienten vha. "readfile(...)".
>>
>> Jeg mangler dog at sætte den korrekte content-type. Spørgsmålet er, om
>> det er muligt at læse den content-type som serveren ville sende, for en
>> given fil, og så sende denne, i stedet for at afgøre content-type på
>> baggrund af fil-endelsen og en switch-statement.
>
> < http://de.php.net/manual/en/function.finfo-file.php>
Fatal error: Call to undefined function finfo_open() in ... on line XX
så vidt jeg har forstået er det en extension som jeg ikke ser ud til at
have. jf. http://1vangede.dk/info.php
Har du noget der ikke kræver at min udbyder skal lave noget?
--
Venlig hilsen
Kasper
| |
Johan Holst Nielsen (03-01-2008)
| Kommentar Fra : Johan Holst Nielsen |
Dato : 03-01-08 18:21 |
|
Kasper Lindberg wrote:
>>> Jeg mangler dog at sætte den korrekte content-type. Spørgsmålet er, om
>>> det er muligt at læse den content-type som serveren ville sende, for en
>>> given fil, og så sende denne, i stedet for at afgøre content-type på
>>> baggrund af fil-endelsen og en switch-statement.
>> < http://de.php.net/manual/en/function.finfo-file.php>
>
> Fatal error: Call to undefined function finfo_open() in ... on line XX
>
> så vidt jeg har forstået er det en extension som jeg ikke ser ud til at
> have. jf. http://1vangede.dk/info.php
>
> Har du noget der ikke kræver at min udbyder skal lave noget?
Jah - det er et PECL modul... så det kan du nok ikke gøre dig for mange
forhåbninger om :(
Anyway - sad lige og synes det var en sjov ting - så jeg skrev et lille
script der måske kan hjælpe dig. Den bruger mime.types filen som ligger
på de fleste *nix'er - ellers kan du blot downloade pakken og selv bruge
den mime.types fil i din egen mappe - og ændre lidt i scriptet...
Det er ikke garanteret korrekt - men det laver blot et simpelt check mod
fileextension i forhold til de mime.types der er defineret... tag et kig
http://phpgeek.dk/testmime.php
--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk
| |
Kasper Lindberg (03-01-2008)
| Kommentar Fra : Kasper Lindberg |
Dato : 03-01-08 20:31 |
|
"Johan Holst Nielsen" <spam@phpgeek.dk> wrote in message
news:477d1972$0$90268$14726298@news.sunsite.dk...
> Kasper Lindberg wrote:
>>>> Jeg mangler dog at sætte den korrekte content-type. Spørgsmålet er, om
>>>> det er muligt at læse den content-type som serveren ville sende, for en
>>>> given fil, og så sende denne, i stedet for at afgøre content-type på
>>>> baggrund af fil-endelsen og en switch-statement.
<cut>
> Anyway - sad lige og synes det var en sjov ting - så jeg skrev et lille
> script der måske kan hjælpe dig. Den bruger mime.types filen som ligger på
> de fleste *nix'er - ellers kan du blot downloade pakken og selv bruge den
> mime.types fil i din egen mappe - og ændre lidt i scriptet...
>
> Det er ikke garanteret korrekt - men det laver blot et simpelt check mod
> fileextension i forhold til de mime.types der er defineret... tag et kig
>
> http://phpgeek.dk/testmime.php
>
Det kunne godt se ud som om at det er det tætteste jeg kommer på "den
perfekte løsning"
Den Pakke du omtaler, hvor finder jeg den?
--
/Kasper
| |
Johan Holst Nielsen (03-01-2008)
| Kommentar Fra : Johan Holst Nielsen |
Dato : 03-01-08 20:49 |
| | |
Kasper Lindberg (04-01-2008)
| Kommentar Fra : Kasper Lindberg |
Dato : 04-01-08 10:11 |
|
"Johan Holst Nielsen" <spam@phpgeek.dk> wrote in message
news:477d3c3f$0$90270$14726298@news.sunsite.dk...
> Kasper Lindberg wrote:
>> "Johan Holst Nielsen" <spam@phpgeek.dk> wrote in message
>>> http://phpgeek.dk/testmime.php
>>>
>> Det kunne godt se ud som om at det er det tætteste jeg kommer på "den
>> perfekte løsning"
>>
>> Den Pakke du omtaler, hvor finder jeg den?
>
> Det står faktisk øverst i kommentarene ;)
>
> http://ftp.de.debian.org/debian/pool/main/m/mime-support/mime-support_3.39-1.tar.gz
>
okay, takker. Næste gang leder jeg også det mest åbenlyse sted :)
--
/Kasper
| |
Jesper Staun Hansen (03-01-2008)
| Kommentar Fra : Jesper Staun Hansen |
Dato : 03-01-08 18:44 |
|
Kasper Lindberg wrote:
> Hej Ng,
>
> Jeg prøver at password-beskytte en række almindelige filer (doc/xls/txt
> ... ).
>
> Filen skrives til klienten vha. "readfile(...)".
>
> Jeg mangler dog at sætte den korrekte content-type. Spørgsmålet er, om det
> er muligt at læse den content-type som serveren ville sende, for en given
> fil, og så sende denne, i stedet for at afgøre content-type på baggrund af
> fil-endelsen og en switch-statement.
>
>
http://dk2.php.net/stream_get_meta_data
| |
Kasper Lindberg (03-01-2008)
| Kommentar Fra : Kasper Lindberg |
Dato : 03-01-08 20:35 |
|
"Jesper Staun Hansen" <jeshan@es.aau.dk> wrote in message
news:477d1ecf$0$90271$14726298@news.sunsite.dk...
> Kasper Lindberg wrote:
<cut>
>> Jeg mangler dog at sætte den korrekte content-type. Spørgsmålet er, om
>> det er muligt at læse den content-type som serveren ville sende, for en
>> given fil, og så sende denne, i stedet for at afgøre content-type på
>> baggrund af fil-endelsen og en switch-statement.
>>
>
> http://dk2.php.net/stream_get_meta_data
hmm .... Jeg plejer godt nok at være god til at forstå obskure svar, men den
der kræver altså lidt mere forklaring ... Hvordan ville jeg bruge indholdet
i ovenstående link, til at finde content-typen på en given fil?
| |
Martin (03-01-2008)
| Kommentar Fra : Martin |
Dato : 03-01-08 21:35 |
|
Kasper Lindberg wrote:
>> http://dk2.php.net/stream_get_meta_data
>
> hmm .... Jeg plejer godt nok at være god til at forstå obskure svar, men den
> der kræver altså lidt mere forklaring ... Hvordan ville jeg bruge indholdet
> i ovenstående link, til at finde content-typen på en given fil?
#$url = url til din fil
$url = ' http://domæne.dk/fil.txt';
if (!($fp = @fopen($url, 'r'))) return NULL;
else $meta = stream_get_meta_data($fp);
var_dump($meta);
Så kan du se hvad du har af muligheder
| |
Johan Holst Nielsen (03-01-2008)
| Kommentar Fra : Johan Holst Nielsen |
Dato : 03-01-08 21:50 |
|
Martin wrote:
> Kasper Lindberg wrote:
>>> http://dk2.php.net/stream_get_meta_data
>>
>> hmm .... Jeg plejer godt nok at være god til at forstå obskure svar,
>> men den der kræver altså lidt mere forklaring ... Hvordan ville jeg
>> bruge indholdet i ovenstående link, til at finde content-typen på en
>> given fil?
>
> #$url = url til din fil
> $url = ' http://domæne.dk/fil.txt';
>
> if (!($fp = @fopen($url, 'r'))) return NULL;
> else $meta = stream_get_meta_data($fp);
> var_dump($meta);
>
> Så kan du se hvad du har af muligheder
Hvis man bruger den løsning skal man nok HUSKE at filer skal ligge i
webscope - og man derfor skal lave noget htaccess for at alle og enhver
ikke kan hente filerne (ved f.eks. at gætte URL'en). Men løsningen
virker blot ikke hvis filerne ikke kan tilgåes via HTTP :(
Mvh
Johan
--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk
| |
Martin (03-01-2008)
| Kommentar Fra : Martin |
Dato : 03-01-08 22:25 |
|
Johan Holst Nielsen wrote:
> Hvis man bruger den løsning skal man nok HUSKE at filer skal ligge i
> webscope - og man derfor skal lave noget htaccess for at alle og enhver
> ikke kan hente filerne (ved f.eks. at gætte URL'en). Men løsningen
> virker blot ikke hvis filerne ikke kan tilgåes via HTTP :(
Det rigtigt, men spørger ville jo sætte en password beskyttelse på
filerne, så derfor må de vil ligge i webscope :)
| |
Johan Holst Nielsen (03-01-2008)
| Kommentar Fra : Johan Holst Nielsen |
Dato : 03-01-08 22:27 |
|
Martin wrote:
> Johan Holst Nielsen wrote:
>> Hvis man bruger den løsning skal man nok HUSKE at filer skal ligge i
>> webscope - og man derfor skal lave noget htaccess for at alle og
>> enhver ikke kan hente filerne (ved f.eks. at gætte URL'en). Men
>> løsningen virker blot ikke hvis filerne ikke kan tilgåes via HTTP :(
>
> Det rigtigt, men spørger ville jo sætte en password beskyttelse på
> filerne, så derfor må de vil ligge i webscope :)
Ikke nødvendigvis hvis de f.eks. streames ud gennem readfile eller lign
i stedet.
--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk
| |
Martin (03-01-2008)
| Kommentar Fra : Martin |
Dato : 03-01-08 23:54 |
|
Johan Holst Nielsen wrote:
> Martin wrote:
>> Johan Holst Nielsen wrote:
>>> Hvis man bruger den løsning skal man nok HUSKE at filer skal ligge i
>>> webscope - og man derfor skal lave noget htaccess for at alle og
>>> enhver ikke kan hente filerne (ved f.eks. at gætte URL'en). Men
>>> løsningen virker blot ikke hvis filerne ikke kan tilgåes via HTTP :(
>>
>> Det rigtigt, men spørger ville jo sætte en password beskyttelse på
>> filerne, så derfor må de vil ligge i webscope :)
>
> Ikke nødvendigvis hvis de f.eks. streames ud gennem readfile eller lign
> i stedet.
Det er jo så helt korrekt, så er første spørgsmål i spørgsmålet jo så
angivet... Lig filerne udenfor webscope, og brug så Johans (svaret kl
18:20) mulighed.
Nu vi snakker om din mulighed Johan, så tjekker den kun filen via
filendelsen, dvs at man sagtens bare kunne lave et switch statement.
(Hvilket jo selvfølgelig er godt nok i 95% af tilfældene) men de sidste
5, der kræver det jo også at man læser selve filen, og udfra teksten
sendes der så en mimetype (ved ikke helt hvordan det egentlig gøres, men
fx. firefox kan sagtens se forskel på om det er et GIF eller et PNG
billede man downloader, prøv at tage en PNG fil og omdøb den til GIF
også højreklikke på den i firefox og download, så siger download
manageren fint nok image/png (den bliver dog stadig gemt som GIF), og
hvordan gøres det mon...)
| |
Johan Holst Nielsen (04-01-2008)
| Kommentar Fra : Johan Holst Nielsen |
Dato : 04-01-08 07:27 |
|
Martin wrote:
> Nu vi snakker om din mulighed Johan, så tjekker den kun filen via
> filendelsen, dvs at man sagtens bare kunne lave et switch statement.
> (Hvilket jo selvfølgelig er godt nok i 95% af tilfældene) men de sidste
> 5, der kræver det jo også at man læser selve filen, og udfra teksten
> sendes der så en mimetype (ved ikke helt hvordan det egentlig gøres, men
> fx. firefox kan sagtens se forskel på om det er et GIF eller et PNG
> billede man downloader, prøv at tage en PNG fil og omdøb den til GIF
> også højreklikke på den i firefox og download, så siger download
> manageren fint nok image/png (den bliver dog stadig gemt som GIF), og
> hvordan gøres det mon...)
Hvorvidt det er en PNG, GIF, TIFF også kan getimagesize() faktisk
returnere den information til os - så det er forholdvist nemt...
Omkring switchen er det helt korrekt - nu tog jeg blot udgangspunkt i en
mime.types fil som formentlig bliver opdateret hen af vejen af mime
support pakken - så man ikke selv behøves manuelt at finde nye mimetypes
men blot kan smide en ny fil en :)
--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk
| |
Kasper Lindberg (04-01-2008)
| Kommentar Fra : Kasper Lindberg |
Dato : 04-01-08 10:39 |
|
"Johan Holst Nielsen" <spam@phpgeek.dk> wrote in message
news:477DD19A.1080804@phpgeek.dk...
> Martin wrote:
>> Nu vi snakker om din mulighed Johan, så tjekker den kun filen via
>> filendelsen, dvs at man sagtens bare kunne lave et switch statement.
>> (Hvilket jo selvfølgelig er godt nok i 95% af tilfældene) men de sidste
>> 5, der kræver det jo også at man læser selve filen, og udfra teksten
>> sendes der så en mimetype
alt for avanceret til at jeg gider at bruge tid på den slags, hvis jeg selv
skal skrive det.
>
> Hvorvidt det er en PNG, GIF, TIFF også kan getimagesize() faktisk
> returnere den information til os - så det er forholdvist nemt...
>
Hvis filerne heder noget forkert, er det ikke mit problem.
> Omkring switchen er det helt korrekt - nu tog jeg blot udgangspunkt i en
> mime.types fil som formentlig bliver opdateret hen af vejen af mime
> support pakken - så man ikke selv behøves manuelt at finde nye mimetypes
> men blot kan smide en ny fil en :)
>
Dette er mit setup (i en lidt forenklet form):
når der efterspørges en fil i en bestemt mappe i webscope
http://domæne.tld/protected/files/file.ext
bliver dette request, via .htaccess, omskrevet til (ingen redirection set
fra klientens synspunkt)
http://domæne.tld/protected/download.php?file=file.ext
for derefter at blive streamet med readfile(...)
Dette betyder at selvom filerne ligger i webscope, er det ikke muligt at
tilgå disse, uden at gå igennem mit php-script, hvorfor et ekstra
http-request ikke er til nogen nytte.
Jeg tror at jeg vil kigge på Johans løsning (igen) og så overveje mine
muligheder.
Tak for hjælpen.
--
/Kasper
| |
Martin (04-01-2008)
| Kommentar Fra : Martin |
Dato : 04-01-08 22:06 |
|
Kasper Lindberg wrote:
> "Johan Holst Nielsen" <spam@phpgeek.dk> wrote in message
> news:477DD19A.1080804@phpgeek.dk...
>> Martin wrote:
>>> Nu vi snakker om din mulighed Johan, så tjekker den kun filen via
>>> filendelsen, dvs at man sagtens bare kunne lave et switch statement.
>>> (Hvilket jo selvfølgelig er godt nok i 95% af tilfældene) men de sidste
>>> 5, der kræver det jo også at man læser selve filen, og udfra teksten
>>> sendes der så en mimetype
>
> alt for avanceret til at jeg gider at bruge tid på den slags, hvis jeg selv
> skal skrive det.
Heller ikke noget jeg ville undersøge nærmere på nuværende tidspunkt,
men nu handler en debat gruppe jo heller ikke altid kun om løsninger,
men løsningerne skal jo også debatteres, også uden at finde direkte en
ny/anden/omskrevet løsning :)
Måske var 95% nok også lavt sat, skulle nok nærmere være 99% :)
>> Hvorvidt det er en PNG, GIF, TIFF også kan getimagesize() faktisk
>> returnere den information til os - så det er forholdvist nemt...
>>
>
> Hvis filerne heder noget forkert, er det ikke mit problem.
Men det kan det blive...
Forstil dig en cracker fyrer en billedefil op, men indholdet i filen er
ikke billed relateret, men direkte skadelig kode. Så når du begynder at
læse filen med readfile, så sker der en masse kryptiske ting, dog ikke
noget jeg har været udefor - og om det kan lade sig gøre er jeg ikke god
nok til at vide :)
| |
Kasper Lindberg (04-01-2008)
| Kommentar Fra : Kasper Lindberg |
Dato : 04-01-08 23:51 |
|
"Martin" <martin@aarhof.eu.invalid> wrote in message
news:477e9fd9$0$90270$14726298@news.sunsite.dk...
> Kasper Lindberg wrote:
>>
>> Hvis filerne heder noget forkert, er det ikke mit problem.
>
> Men det kan det blive...
> Forstil dig en cracker fyrer en billedefil op, men indholdet i filen er
> ikke billed relateret, men direkte skadelig kode. Så når du begynder at
> læse filen med readfile, så sker der en masse kryptiske ting, dog ikke
> noget jeg har været udefor - og om det kan lade sig gøre er jeg ikke god
> nok til at vide :)
hmm.... så vidt jeg har forstået, så bliver filen læst, byte for byte, og
skrevet til std. out. Ikke noget med at fortolke den som instruktioner, så
det burde være sikkert nok at ignorere fejl-navngivne filer.
Derudover, så er de fleste af mine brugere teknisk handikappede, så de gør
ingen skade (dvs. de kan ikke gøre mere (skade) end jeg giver dem lov til
(jf. principle of least privilege))
--
/Kasper
| |
Johan Holst Nielsen (04-01-2008)
| Kommentar Fra : Johan Holst Nielsen |
Dato : 04-01-08 07:27 |
|
Martin wrote:
> Nu vi snakker om din mulighed Johan, så tjekker den kun filen via
> filendelsen, dvs at man sagtens bare kunne lave et switch statement.
> (Hvilket jo selvfølgelig er godt nok i 95% af tilfældene) men de sidste
> 5, der kræver det jo også at man læser selve filen, og udfra teksten
> sendes der så en mimetype (ved ikke helt hvordan det egentlig gøres, men
> fx. firefox kan sagtens se forskel på om det er et GIF eller et PNG
> billede man downloader, prøv at tage en PNG fil og omdøb den til GIF
> også højreklikke på den i firefox og download, så siger download
> manageren fint nok image/png (den bliver dog stadig gemt som GIF), og
> hvordan gøres det mon...)
Hvorvidt det er en PNG, GIF, TIFF også kan getimagesize() faktisk
returnere den information til os - så det er forholdvist nemt...
Omkring switchen er det helt korrekt - nu tog jeg blot udgangspunkt i en
mime.types fil som formentlig bliver opdateret hen af vejen af mime
support pakken - så man ikke selv behøves manuelt at finde nye mimetypes
men blot kan smide en ny fil en :)
--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk
| |
Jesper Staun Hansen (04-01-2008)
| Kommentar Fra : Jesper Staun Hansen |
Dato : 04-01-08 00:36 |
|
Johan Holst Nielsen wrote:
> Martin wrote:
>> Kasper Lindberg wrote:
>>>> http://dk2.php.net/stream_get_meta_data
>>>
>>> hmm .... Jeg plejer godt nok at være god til at forstå obskure svar,
>>> men den der kræver altså lidt mere forklaring ... Hvordan ville jeg
>>> bruge indholdet i ovenstående link, til at finde content-typen på en
>>> given fil?
>>
>> #$url = url til din fil
>> $url = ' http://domæne.dk/fil.txt';
>>
>> if (!($fp = @fopen($url, 'r'))) return NULL;
>> else $meta = stream_get_meta_data($fp);
>> var_dump($meta);
>>
>> Så kan du se hvad du har af muligheder
>
> Hvis man bruger den løsning skal man nok HUSKE at filer skal ligge i
> webscope - og man derfor skal lave noget htaccess for at alle og enhver
> ikke kan hente filerne (ved f.eks. at gætte URL'en). Men løsningen
> virker blot ikke hvis filerne ikke kan tilgåes via HTTP :(
>
> Mvh
> Johan
>
fopen kan dog også bruges til filer der ligger lokalt.
http://dk2.php.net/manual/en/function.fopen.php
| |
Johan Holst Nielsen (04-01-2008)
| Kommentar Fra : Johan Holst Nielsen |
Dato : 04-01-08 07:28 |
|
Jesper Staun Hansen wrote:
> fopen kan dog også bruges til filer der ligger lokalt.
> http://dk2.php.net/manual/en/function.fopen.php
Ja - selvfølgelig - men den kan ikke bruge pointeren fra fopen til at
finde mimetype via stream_get_meta_data... så det hjælper intet...
--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk
| |
|
|