2016-07-26 4 views
-1

はちょっと私はそのため私は、ユーザーが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; 
     } 
    } 

が、問題を使用していますので、ユーザは、二重拡張子のファイルをアップロードしようとしているかどうかを確認しようとしているuplaod大文字で.PHP.pngので、私は、私はあなたがpreg_match('/.php.|.js.|.PHP.|.JS./')に正規表現を変更した場合、私は

+1

おそらく、チェックの前にhttp://php.net/manual/en/function.strtolower.php strtolowerを使用できますか?すべての文字を小文字に変換するには? – Danielius

+0

@ダニエリウスはあなたに大変感謝しています – PacMan

+0

問題はありません、幸運:) – Danielius

答えて

1

ことpreg_match('/.any_string./',$sFileName)どのように行うことができます言いたいpreg_match('/.php.|.js./',$sFileName)でthnigを扱うことができる任意の正規表現があるかどうか見つけようとしています大文字のPHPまたはJSのファイルは一致します。すべての文字を一致させたい場合は、preg_match('/.any_string./',$sFileName)のように、正規表現はpreg_match('/です。[a-zA-Z] *。 /', $sFileName)

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

希望、それは私があなたのことを推測しています:)

1

役立つこと:もっとして1つのピリオド文字列では、単に条件として、次のコードスニペットを使用するがある場合 あなたは、確認したい場合ここでファイルアップロードの脆弱性を止めようとしています。 double extension uploadを停止することは、phpファイルをアップロードして実行することによって悪用されることがよくあります。この種の攻撃を阻止する適切な方法は、アップロードディレクトリに対して適切な権限を設定することです。読み取り権限と書き込み権限を追加しますが、実行権限は追加しません。

amazon s3などを使用した方が簡単になります。

具体的にご使用の場合には、ここであなたは、二重拡張子のアップロードを防ぐが、再び適切なディレクトリのパーミッションを設定することができますこの方法では、この方法がよい

<?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 
?> 

を使用できるサンプルコードです。