В настоящее время я пишу класс загрузки для загрузки изображений. Я выполняю проверки расширений, чтобы убедиться, что загруженные изображения поддерживаются типами, а фотографии всегда являются chmod (0664), когда загруженный файл копируется в место отдыха. Это относительно безопасно? Я не очень разбираюсь в кодировании изображений, но даже если кто-то столкнулся с проблемой как-то обмануть мою проверку расширения, файл никогда не будет запущен на сервере, если бы не было отверстия безопасности в другом месте, и злоумышленники уже попали в мой файл система, правильно? Вот моя проверка расширения:Загрузка файлов и безопасность
function validate_ext() { //Function validates that the files extension matches the list of allowed extensions
$extension = $this->get_ext($this->theFile);
$ext_array = $this->extensions;
if (in_array($extension, $ext_array)) { //Check if file's ext is in the list of allowed exts
return true;
echo "ext found";
} else {
$this->error[] = "That file type is not supported. The supported file types are: ".$this->extString;
return false;
}
}
И вот функция, которая копирует загруженный файл в место последнего отдыха.
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());
}
Чтобы быть уверенным, что ничто никогда не будет выполнено каким-либо образом, просто создайте вокруг него сценарий оболочки. Сценарий обертки должен делать заголовок («Content-type: $ mime_type») и выгружать содержимое файла в stdout. Чтобы определить тип mime, проверьте расширение fileinfo pecl (http://us3.php.net/manual/en/ref.fileinfo.php). – Friek