De extentie van een file

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tim Kampherbeek

Tim Kampherbeek

21/07/2010 12:40:16
Quote Anchor link
Beste medePHPers,

Ik heb een kleine vraag.
Als ik een video of foto upload en deze in een post meegeef, Hoe lees ik dan van die post af welke extentie die file heeft?

bijv: ik upload test.jpg
$_POST['blaat'] = 'test.jpg';

hoe kan ik dat jpg in een variable krijgen? want ik moet namelijk de soort extentie apart in de database zetten.

Bij voorbaard dank
 
PHP hulp

PHP hulp

29/03/2024 15:40:57
 
- SanThe -

- SanThe -

21/07/2010 12:45:55
Quote Anchor link
Dat soort gegevens zitten niet in $_POST maar in $_FILES.
 
Wesley Overdijk

wesley Overdijk

21/07/2010 12:46:21
Quote Anchor link
Second. :)
 
Jan geen

Jan geen

21/07/2010 12:46:54
Quote Anchor link
end(explode(".", $_POST['blaat']))
 
Wesley Overdijk

wesley Overdijk

21/07/2010 12:49:04
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$filename
= basename($file['uploaded_file']['name']);
$ext = strtolower(substr($filename, strrpos($filename, '.') + 1));
?>
Gewijzigd op 21/07/2010 12:49:51 door wesley Overdijk
 
Mick ForSure

Mick ForSure

21/07/2010 15:49:28
Quote Anchor link
veel te omslachtig allemaal:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

$path_info
= pathinfo($file['uploaded_file']['name']);
print $path_info['extension'];
?>
 
P Lekensteyn

P Lekensteyn

21/07/2010 17:42:49
Quote Anchor link
De voorkeur gaat naar de directe aanpak, zoals die van wesley.
pathinfo() geeft meer dan je wilt weten, en is niet eens helemaal correct ook:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
print_r(pathinfo('/abc/...'));
/**
 * Array
 * (
 *     [dirname] => /abc
 *     [basename] => ...
 *     [extension] =>
 *     [filename] => ..
 * )
 */

?>
 
Mark PHP

Mark PHP

21/07/2010 21:50:18
Quote Anchor link
Let op dat dit niet veilig is. Het is nu nog steeds mogelijk om (bijvoorbeeld) een PHP script up te loaden met een .jpg extensie.

Gebruik fileinfo als je echt naar de inhoud (MIME type) van een bestand wilt kijken. En zelfs dan zullen er ongetwijfeld nog mazen in de wet zitten.
 
Johan Dam

Johan Dam

22/07/2010 08:34:04
Quote Anchor link
het MIME type is ietsjes moeilijker te neppen dan extensie,
gebruik de getimagesize() functie, deze zal OF een array teruggeven OF false als het geen goeie afbeelding is,

Dit kan dus heel mooi zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
if(getimagesize($_FILES['bestand']['tmp_name'])){
    // het is een goeie afbeelding! Haal de extensie maar op:
    $extensie = end(explode('.', $_FILES['bestand']['name']));
    // verder met je code
} else {
    // fout!
}
?>
 
Chris -

Chris -

22/07/2010 08:49:02
Quote Anchor link
Johan Dam op 22/07/2010 08:34:04:
het MIME type is ietsjes moeilijker te neppen dan extensie,
gebruik de getimagesize() functie, deze zal OF een array teruggeven OF false als het geen goeie afbeelding is,

Dit kan dus heel mooi zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
if(getimagesize($_FILES['bestand']['tmp_name'])){
    // het is een goeie afbeelding! Haal de extensie maar op:
    $extensie = end(explode('.', $_FILES['bestand']['name']));
    // verder met je code
} else {
    // fout!
}
?>


Precies andersom, de MIME-type is juist hartstikke makkelijk te neppen, de extensie is wat lastiger. Door gebruik te maken van de NULL-byte kun je bij sommige systemen een extensie faken, maar niet bij allemaal.. MIME-type word namelijk met de browser meegegeven, dus die kan je veranderen. Extensie overigens ook, maar als je alleen een plaatje mag uploaden, kun je er wel code in zetten, maar die word niet uitgevoerd. (Tenzij je een heel slecht geconfigureerde server hebt...)
 
Johan Dam

Johan Dam

22/07/2010 08:54:53
Quote Anchor link
Het is hoe dan ook niet te vertrouwen ;)

Alleen denk ik toch dat een extensie makkelijker te neppen is, (bestands-naam wijzigen is niet erg moeilijk immers) MIME is ook niet moeilijk, maar daar heb je in mijn ogen toch iets meer kennis voor nodig.

Maar goed, gewoon niet vertrouwen, content-sniffing is beter, ook niet water dicht maar toch beter dan MIME / extensie
 
Chris -

Chris -

22/07/2010 09:06:19
Quote Anchor link
Extensie is ook wel te neppen, maar zolang je server niet enorm slecht is ingesteld, kan het weinig kwaad. Je kan wel een PHP-file omtoveren naar een plaatje, de code wordt niet uitgevoerd op de server ;-)

Meeste upload-systemen controleren de type door te kijken naar de MIME-type, en die zijn makkelijk te faken. Dan kun je dus wél een PHP-file uploaden als plaatje (content-type: text/php veranderen naar content-type: image/jpeg) en vervolgens ook echt code uitvoeren...
 
Johan Dam

Johan Dam

22/07/2010 09:27:20
Quote Anchor link
Ja oke, extensie neppen is redelijk makkelijk, maar is veel minder gevaarlijk inderdaad,

Maar sowieso, waarom zou je zo'n soort controle doen op een afbeelding? (bij andere bestanden snap ik het nog) Beter is om te controleren of het echt een afbeelding is ipv te controleren of het echt een jpeg is
 
P Lekensteyn

P Lekensteyn

22/07/2010 10:01:09
Quote Anchor link
Alleen als je de server verkeerd hebt geconfigureerd (alle bestanden als PHP parsen / apache instellen zodat het op de mimetype afgaat, en niet de extensie),
kan het kwaad dat zo'n bestand PHP code bevat.
Als je echt niet zeker bent ervan neem je de upload in een map buiten public_html op, en lees je deze in met readfile.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.