2011-07-29 24 views
1

私は現在、画像をアップロードするためのアップロードクラスを作成しています。アップロードされたイメージがサポートされているタイプであることを確認する拡張チェックを行い、アップロードされたファイルを休憩場所にコピーすると、写真は常にchmod(0664)になります。これは比較的安全ですか?私は画像のエンコーディングについてはあまりよく分かりませんが、誰かが私の内線チェックを邪魔してしまったとしても、他の場所にセキュリティホールがなく、攻撃者が既に私のファイルに入っていない限り、システム、正しい?拡張チェックは次のとおりです。ファイルのアップロードとセキュリティ

ここでは、アップロードされたファイルを最終的な休憩場所にコピーする機能があります。

if ($_FILES[$this->uploadName]['error'] === UPLOAD_ERR_OK){ 
    $newfile = $this->uploadDir.$this->theFile; 
    if (!move_uploaded_file($this->tempFile, $newfile)) { 
     $this->error[] = "The file could not be moved to the new directory. Check permissions and folder paths."; 
     die($this->error_text()); 
    }else{ 
     $this->error[] = "The file ".$this->originalName." was successfully uploaded."; 
     if ($this->renameFile == true){ 
      $this->error[] = $this->originalName." was renamed to ".$this->theFile; 
     } 
     chmod($newfile , $this->fileperm); 
    } 
}else{ 
    $this->error[] = $this->file_upload_error_message($_FILES[$this->uploadName]['error']); 
    die($this->error_text()); 
} 
+0

何とか何とか実行されることはないと確信するには、その周りにラッパースクリプトを作成してください。ラッパースクリプトはヘッダー( "Content-type:$ mime_type")を実行し、ファイルの内容をstdoutにダンプする必要があります。 mime-typeを調べるには、fileinfo pecl拡張子(http://us3.php.net/manual/en/ref.fileinfo.php)を参照してください。 – Friek

答えて

1

Linuxの世界では、ファイルが実行不能なアクセス権を与えられている限り、ファイルは実行できません。それが.jpegでも、それとも.bashでも。これは、逆も当てはまります。実行可能権限を持つ.jpegも実行できます(.jpegファイルの内容がイメージコンテンツではなく実行可能ファイルである場合)。

+0

だから、アクセス許可を確認してください。 ;) – VOX

+0

拡張チェック、MIMEチェック、そしてどこのユーザーがファイルをアップロードできるようにするよりもはるかに安全です。これらのファイルは常に644のように保存されます。すべての洞察力のある人に感謝します! – Throttlehead

2

拡張子を読むことは、実際にはファイルの種類をチェックするのには適していません。ファイルmime type ...が偽造されているかもしれないが、偽造するのは面倒です。

関連する問題