2016-08-30 4 views
0

Ich würde mich freuen, wenn Sie mir mit diesem PHP-Code helfen.Versuchen, Dateitypen zu bestimmen

Ich habe ein Upload-Formular, das nur .pdf, .docx und .rtf Dateien unterstützt. Die Datei wird hochgeladen, aber es kann nicht feststellen, ob der Dateityp pdf, docx oder rtl oder nur nicht von ihnen ist. Irgendwelche Lösungen, um das zu beheben?

Nun, ich habe ein paar Suchen in stackoverflow, einige der Mitglieder taten das gleiche wie ich, aber meins funktioniert immer noch nicht. Dieser Code ruft eine Datei von einer Eingabe ab. Es lädt die Datei auf einen Server in einem bestimmten Ordner und speichert dann den Namen der Datei in der Datenbank.

<?php 
 
    function query($q) 
 
    { 
 
    $dbconnection = mysql_connect('127.0.0.1' , 'root' , ''); 
 
    $database = mysql_select_db('hire_requests'); 
 
    mysql_set_charset("utf8",$dbconnection); 
 
    $res = mysql_query($q,$dbconnection); 
 
    mysql_close($dbconnection); 
 
    return $res; 
 
    } 
 
    function test_input($data) 
 
    { 
 
    $data = trim($data); 
 
    $data = stripslashes($data); 
 
    $data = htmlspecialchars($data); 
 
    return $data; 
 
    } 
 
    $error = ''; 
 
    $alarm = false; 
 
    $success = false; 
 
    $changedname = ''; 
 
    $name = ''; 
 
    $lastname = ''; 
 
    $phonenumber; 
 
    $nnumber; 
 
    $type =''; 
 
    $mail = ''; 
 
    $resume; 
 
    $type = ''; 
 
    $notify = ''; 
 
    $nameErr= ""; 
 
    $mailErr = ""; 
 
    $resumeErr = ""; 
 
    $nnumberErr = ""; 
 
    $lastnameErr = ""; 
 
    $phonenumberErr = ""; 
 
    $notsentErr = ""; 
 
    $sizeErr = ""; 
 
    if($_SERVER['REQUEST_METHOD'] == 'POST') 
 
    { 
 
    $name = mysql_real_escape_string($_POST['name']); 
 
    $lastname = mysql_real_escape_string($_POST['lastname']); 
 
    $phonenumber = mysql_real_escape_string($_POST['phonenumber']); 
 
    $nnumber = mysql_real_escape_string($_POST['nnumber']); 
 
    $mail = mysql_real_escape_string($_POST['mail']); 
 
    if(isset($_FILES['resume'])) 
 
    { 
 
     $filename = $_FILES['resume']['name']; 
 
     $filesize = $_FILES['resume']['size']; 
 
     $filetype = $_FILES['resume']['type']; 
 
     $filetmp = $_FILES['resume']['tmp_name']; 
 
     if($_FILES['resume']['error'] !== 0) 
 
     { 
 
     $alarm = true; 
 
     } 
 
     $AllowedTypesArray = array('docx' , 'rtf' , 'pdf'); 
 
     $changedname = 'Rayka_' . rand(1000,9000) . '_' . '5SV4DFS_A245DFA' . '_' . time() . '_' . $name; 
 
     $info = pathinfo($filename , PATHINFO_EXTENSION); 
 

 
     if($alarm = true) 
 
     { 
 

 
     } 
 
     if($filetype == 'application/pdf') 
 
     { 
 
     $type = '.pdf'; 
 
     } 
 
     if($filetype == 'application/msword') 
 
     { 
 
     $type = '.docx'; 
 
     } 
 
     if($filetype == 'application/rtf') 
 
     { 
 
     $type = '.rtf'; 
 
     } 
 
     if(!$type) 
 
     { 
 
     $resumeErr = "file's type is not supported"; 
 
     } 
 
     if(!in_array($info , $AllowedTypesArray)) //checks if filetype is pdf , rtl or docx and also , checks if the file is less than 2 mbs or not . 
 
     { 
 
     $error = "file's type is not supported"; 
 
     $alarm = true; 
 
     } 
 
     if($filesize > 2097152) 
 
     { 
 
     $sizeErr ="Your file must be less than 2 Mbs"; 
 
     } 
 
     $path = dirname(__FILE__).'/_ufile/'.$changedname . $type; 
 
     var_dump($path); 
 
    if(!move_uploaded_file($_FILES['resume']['tmp_name'] , $path)) 
 
     { 
 
     $alarm = true; 
 
     $notsentErr = 'File was not sent'; 
 
     } 
 
    } 
 
    if(!isset($_FILES['resume'])) 
 
    { 
 
     $resumeErr = 'attachment is not chosen'; 
 
     $alarm = true; 
 
    } 
 
      if($_SERVER['REQUEST_METHOD'] == 'POST') 
 
      { 
 
       if (empty($_POST["name"])) 
 
       { 
 
        $nameErr = "Enter your name"; 
 
       } 
 
       else 
 
       { 
 
        $name = test_input($_POST["name"]); 
 
       } 
 
      } 
 
      if(empty($_POST['lastname'])) 
 
      { 
 
       $lastnameErr = "Enter your last name"; 
 
      } 
 
      else { 
 
       $lastname = test_input($_POST['lastname']); 
 
      } 
 
      if(empty($_POST['phonenumber'])) 
 
      { 
 
       $phonenumberErr = "Enter your phone number"; 
 
      } 
 
      else 
 
      { 
 
       $phonenumber = test_input($_POST['phonenumber']); 
 
      } 
 
      if(empty($_POST['nnumber'])) 
 
      { 
 
       $nnumberErr = "Enter your second phone number"; 
 
      } 
 
      else 
 
      { 
 
       $nnumber = test_input($_POST['nnumber']); 
 
      } 
 
      if(empty($_POST['mail'])) 
 
      { 
 
       $mailErr = "enter your email address"; 
 
      } 
 
      else 
 
      { 
 
       $mail = test_input($_POST['mail']); 
 
      } 
 
      if((!$nameErr) && (!$lastnameErr) && (!$mailErr) && (!$phonenumberErr) && (!$nnumberErr) && (!$notsentErr) && (!$sizeErr)) 
 
      { 
 

 
      $query = "INSERT INTO users (`id`,`name`, `lastname`, `phonenumber`, `nnumber`, `mail`, `resume`) VALUES (NULL , \"$name\",\"$lastname\",\"$phonenumber\",\"$nnumber\",\"$mail\",\"$changedname\")"; 
 
      $notify = "Successful"; 
 
      $success = true; 
 
      $insert = query($query); 
 
      $error2 = mysql_error(); 
 
      } 
 
    } 
 
    ?>

+0

Dies kann nicht das vollständige Skript sein, Sie sind benutzen ?! Was ist in $ Dateityp? – Naruto

+0

Ja, es ist eigentlich nur ein Teil davon. Dateityp ist eigentlich das: $ filetype = $ _FILES ['Lebenslauf'] ['Typ']; –

+0

Nun, ich werde das ganze Skript posten. –

Antwort

1

Hier ist, was ich benutze (i für Sie geändert benötigt):

$finfo = finfo_open(FILEINFO_MIME_TYPE); 
$mime = finfo_file($finfo, $_FILES['resume']['tmp_name']); 
$ok = false; 
switch ($mime) { 
    case 'application/pdf': 
    case 'application/msword': 
    case 'text/pdf': 
    case 'application/rtf': 
    case 'application/x-rtf': 
    case 'text/richtext': 
    case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 
     $ok = true; 
     break; 
    default: 
     die(); 
} 

die komplette Liste MIME-Typ: https://www.sitepoint.com/web-foundations/mime-types-complete-list/

+0

Dies ist der Ansatz, dem ich folgen würde. Ein sehr wichtiges Wort der Warnung: MIME-Typen beweisen nicht, dass die Datei das ist, was sie zu sein behauptet. Ich kann mich Französisch nennen, obwohl ich Engländer bin. Nimm niemals an, dass MIME in einem Sicherheitskontext korrekt ist. PDFs und docx-Dateien sind zwei der am häufigsten angegriffenen Formate für bösartige Payloads - daher würde ich zusätzlich zu allen MIME-Prüfungen dringend einen Viren-Scan und/oder eine Konvertierung zum Image etc. empfehlen. – wally

+0

Vielen Dank, dass du dir Zeit für MaximeK genommen hast. Ich schätze mit sterben(); vermeidet den Rest des Codes ausgeführt –

+0

@ SinaR - http://php.net/manual/en/function.die.php und http://php.net/manual/en/function.finfo-file.php – wally

Verwandte Themen