Graag zou ik willen weten in hoeverre de volgende code "fool-proof" is?
----- begin (tabs verwijderd)
<?php
/*
* uploadform.php v 2.4 2005/07/19 16:48
*
*/
// Let er op dat er een "trailing slash" '/' achter het PATH
// geplaatst wordt. Ja, het is een IIS machine
$UploadDir = 'D:/www/example.org/www/upload/';
// Geef de naam in dat gebruikt wordt in het invoer veld
$UserFileName = 'userfile';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>PHP File-Upload</title>
<meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
</head>
<body>
<?PHP
// controleer of het formulier gesubmit is
if (isset($_POST['set'])) {
// kijk naar deze bestands typen (jpg|jpeg|gif|png|bmp)...
// Alleen dezen worden geaccepteerd.
if (eregi("(jpg|jpeg|gif|png|bmp)$",$_FILES[$UserFileName]['name'])) {
// controleert aan de hand van het mime-type of het wel
// daadwerkelijk een image betreft.
$MimeType =
image_type_to_mime_type(getimagesize($_FILES[$UserFileName]['tmp_name']));
if ($MimeType == ("image/png") || $MimeType == ("image/jpeg") ||
$MimeType == ("image/gif") || $MimeType == ("image/psd") || $MimeType ==
("image/bmp")) {
// eindigt de bestandsnaam met iets dat wij willen *en* is het
// mime-type goed bevonden, dan gaan we het bestand verplaatsen
// van de temp_directory naar $UploadDir
if (move_uploaded_file($_FILES[$UserFileName]['tmp_name'], $UploadDir .
$_FILES[$UserFileName]['name'])) {
// Geef een bevestiging aan de gebruiker
echo "<div>Bestand is goed bevonden en was succesvol geupload.</div>";
echo "<div>Bestandsnaam is: " .$_FILES[$UserFileName]['name'] . "<br>";
echo "Klik <a href='upload.php'>hier</a> om nog een bestand te
uploaden.</div>";
}
}
else {
// fout afhandeling mime-type
echo "Mimetype was niet goed";
}
}
else {
// Er is iets mis gegaan, het bestand voldoet niet aan wat wij willen.
// Geef een foutmelding weer, inclusief bestandsnaam.
echo "Error, filename was " . $_FILES[$UserFileName]['name'] . "<br>";
echo "Gebruik de <i>back button</i> om het nogmaals te proberen";
}
}
else {
// formulier was niet gesubmit, geef het formulier weer
?>
<div>
<form enctype="multipart/form-data" method="post" action="<?php echo
$_SERVER['PHP_SELF'];?>" id="upload">
<div>
<!-- De MAX_FILE_SIZE is een advies aan de browser, geen harde limiet -->
<input type="hidden" name="MAX_FILE_SIZE" value="2000000" />
Send this file: <input name="userfile" type="file" />
<input type="submit" name="set" value="Send File" />
</div>
</form>
</div>
<?php
}
?>
</body>
</html>
----- eind
Met mijn gelimiteerde kennis van PHP kon ik niet echt een andere manier
bedenken om te controleren of het geuploade bestand echt een image is,
dan het gebruik van de functies image_type_to_mime_type() en getimagesize().
Ik zou dus niet willen dat iemand deze functie (of de eregi op het einde
van de bestandsnaam) zou kunnen omzeilen om zodoende scripts te kunnen
uploaden.
Alvast bedankt voor enig input.
Groeten, Jan Reilink

Likes:

Quote
