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 tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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