De extentie van een file
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
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
Dat soort gegevens zitten niet in $_POST maar in $_FILES.
Second. :)
end(explode(".", $_POST['blaat']))
Code (php)
1
2
3
4
2
3
4
<?php
$filename = basename($file['uploaded_file']['name']);
$ext = strtolower(substr($filename, strrpos($filename, '.') + 1));
?>
$filename = basename($file['uploaded_file']['name']);
$ext = strtolower(substr($filename, strrpos($filename, '.') + 1));
?>
Gewijzigd op 21/07/2010 12:49:51 door wesley Overdijk
veel te omslachtig allemaal:
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:
pathinfo() geeft meer dan je wilt weten, en is niet eens helemaal correct ook:
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.
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.
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:
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)
1
2
3
4
5
6
7
8
9
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!
}
?>
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!
}
?>
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:
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)
1
2
3
4
5
6
7
8
9
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!
}
?>
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...)
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
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
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...
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...
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
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
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.
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.




