20. september 2009 - 18:34
Der er
9 kommentarer og 1 løsning
Validering af filtype
Hej Eksperter, Her er et script der virker som det er, men jeg vil gerne have det til kun at acceptere css filer, ikke billedfiler. <?php if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/pjpeg")) && ($_FILES["file"]["size"] < 200000)) { if ($_FILES["file"]["error"] > 0) { echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; } else { echo "Upload: " . $_FILES["file"]["name"] . "<br />"; echo "Type: " . $_FILES["file"]["type"] . "<br />"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; if (file_exists("upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " already exists. "; } else { move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; } } } else { echo "Invalid file"; } ?> Jeg har forsøgt at ændre if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/pjpeg")) && ($_FILES["file"]["size"] < 200000)) til: if (($_FILES["file"]["type"] == "text/css") && ($_FILES["file"]["size"] < 200000)) Men får fejlbeskeden "Invalid file" Er der nogen der kan sige hvad jeg gør galt?
Annonceindlæg fra Infor
20. september 2009 - 19:34
#1
<ole>
$a = explode(".", $_FILES["file"]["name"]); if (end($a)=="css") { // CSS-fil }
/mvh
</bole>
20. september 2009 - 19:39
#2
hejsa :) det virker helt fint for mig, hvis jeg bare ændrer det til text/css: <form name="form1" enctype="multipart/form-data" method="post" action=""> <input type="file" name="file" id="upload"> <br/> <input type="submit" name="button" id="button" value="Upload!"> </form> <?php if(isset($_POST['button'])){ if ((($_FILES["file"]["type"] == "text/css")) && ($_FILES["file"]["size"] < 200000)) { if ($_FILES["file"]["error"] > 0) { echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; } else { echo "Upload: " . $_FILES["file"]["name"] . "<br />"; echo "Type: " . $_FILES["file"]["type"] . "<br />"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; if (file_exists("upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " already exists. "; } else { move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; } } } else { echo "Invalid file"; } } ?> Ved upload kommer denne melding: Upload: pollmaker.css Type: text/css Size: 1.0322265625 Kb Temp file: /var/www/tmp/php7BNNdm Stored in: upload/pollmaker.css
20. september 2009 - 20:03
#3
Ja, men så udsætter du dig for seriøs ballade! Jeg kan uploade en eksekverbar fil med faked MIME-typen - men en fil, der ender på .css kan aldrig eksekveres ;o)
20. september 2009 - 20:04
#4
- og det betyder, at hvis du tester på MIME-typen, kan jeg slette alt på din server ;o)
20. september 2009 - 20:15
#5
Hehe ok :) Kan det samme så ikke gøres for mime-typen image/gif f.eks.?
20. september 2009 - 20:20
#6
@ cot, mærkligt det ikke virker hos mig. @ olebole, sikkerheden skal naturligvis være i orden, udover at uploade filen, skal der også gemmes en titel i en mysql database, så jeg er gået over til et script der ser ud som følger: $path_to_directory = 'CSS_upload/'; if(isset($_FILES['fil'])) { if(preg_match('/[.](css)$/', $_FILES['fil']['name'])) { $filename = $_FILES['fil']['name']; $source = $_FILES['fil']['tmp_name']; $target = $path_to_directory . $filename; move_uploaded_file($source, $target); } } if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "css_uploader")) { $insertSQL = sprintf("INSERT INTO styles (navn, filnavn) VALUES (%s, %s)", GetSQLValueString($_POST['navn'], "text"), GetSQLValueString($_FILES['fil']['name'], "text")); Hvordan vil du vurdere sikkerheden her? Hvis der kun skal skrives data i databasen, hvis det er en css fil, hvordan ville du skrive det? Som det er nu uploader den kun, hvis det er en css fil, men den skriver filnavnet og titlen i databasen, selv hvis man forsøger at uploade en fil af en anden type.
21. september 2009 - 23:29
#8
Det virker fint nu, tak for hjælpen olebole, smid et svar, så får du point.
21. september 2009 - 23:57
#9
Selvtak =)
22. september 2009 - 22:29
#10
- og tak for points =)
Vi tilbyder markedets bedste kurser inden for webudvikling