2016-07-26 8 views
-1

hey ich versuche, zu überprüfen, ob der Benutzer eine doppelte Erweiterung Datei hochzuladen versuchen, so zu, dass ich mit dem folgenden CodeStopp doppelte Erweiterung uplaod

function ExtensionValide($sFileName) { 

     $fileNameInfo = array(); 
     if (preg_match('/.php.|.js./',$sFileName)) { 
      return false; # Tentative de masquer des extensions dangereuses ! 
     } 
     else { 
      $extension_valide = array('gif','png','jpg','jpeg','txt','pdf','html','mp3','csv'); 
      $extension_upload = strtolower(substr(strrchr($sFileName,'.'),1)); 
      $fileNameInfo[0] = in_array($extension_upload,$extension_valide); 
      $fileNameInfo[1] = ".$extension_upload"; 
      $fileNameInfo[2] = basename($sFileName,$fileNameInfo[1]); 
      return $fileNameInfo; 
     } 
    } 

aber das Problem nach wie vor, dass der Benutzer uplaod kann .PHP.png mit einem Großbuchstaben, so versuche ich zu finden, wenn es ein regulärer Ausdruck ist, der die thnig in preg_match('/.php.|.js./',$sFileName) verarbeiten kann ich preg_match('/.any_string./',$sFileName) sagen will, wie kann ich das tun

+1

vielleicht können Sie http://php.net/manual/en/function.strtolower.php strtolower vor der Überprüfung verwenden? alle Buchstaben in Kleinbuchstaben umwandeln? – Danielius

+0

@Danielius vielen Dank, dass du es richtig gemacht hast – PacMan

+0

Kein Problem, viel Glück :) – Danielius

Antwort

1

wenn Sie die Regex preg_match('/.php.|.js.|.PHP.|.JS./') ändern, Dateien mit Großbuchstaben PHP oder JS werden abgeglichen. Wenn Sie alle Zeichen abgleichen möchten, wie Sie in preg_match('/.any_string./',$sFileName) erwähnen, ist die Regex preg_match('/. [A-zA-Z] *. /', $sFileName). Wenn Sie möchten, um zu überprüfen, ob es mehr als eine Periode Zeichen in der Zeichenfolge ist, einfach den folgenden Code-Schnipsel als Bedingung verwenden:

$condition = substr_count($sFileName, '.') > 1 

Hoffnung, dass es :)

1

hilft ich, dass Sie sich raten, versuchen, die Dateiupload-Sicherheitsanfälligkeit hier zu stoppen. Stoppen Doppel extension upload wird oft durch Hochladen von PHP-Dateien und deren Ausführung missbraucht. Um diese Art von Angriff zu stoppen, müssen Sie die richtigen Berechtigungen für Ihr Upload-Verzeichnis festlegen. Lese- und Schreibberechtigung hinzufügen, aber keine Berechtigung ausführen.

Dies wird einfacher sein, wenn Sie Amazon S3 oder etwas verwendet haben.

Speziell auf Ihren Anwendungsfall, hier ist ein Beispielcode, den Sie

<?php 
$file_name = ''; //Unsecure file with double extention 
$file_explode = explode(".",$file_name); 
$extention = $file_explode[sizeof($file_explode)]; // Last extention 
$file_new_name = uniqid()+"."+$extention; 

//Save the file using $file_new_name 
//Add database entry that maps $file_name to $file_new_name 
?> 

Auf diese Weise können Sie doppelte Erweiterung Upload verhindern können, aber Einstellungen wieder richtige Verzeichnisberechtigungen ist besser, dass diese Methode.