/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
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 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

Mvh
Johan

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

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste