Ok 여기에 파일 업로드 코드가 있습니다.
$ext_whitelist = array('pdf','doc','doc','mkv','mp4','mpg','mpeg','avi','flv','wma','ogg');
if(in_array($ext, $ext_whitelist))
{
$uniqid_file = uniqid('', true)."_".$file['name'];
$lokacija = $folder . "/" . $uniqid_file;
$encoded_uniqid_file = base64_encode($uniqid_file);
move_uploaded_file($file['tmp_name'], $lokacija);
$base_url= base_url("forms/fdownload/$encoded_uniqid_file/$path");
$form_data[$key] = "<a href=".$base_url.">$uniqid_file </a>";
}
이것은 파일 확장자를 확인하므로 일부는 파일 이름을 쉽게 바꿀 수 있습니다. 누군가가 파일 유형을 올바르게 확인하도록 도와 줄 수 있습니까?
댓글을 달고 답으로 좀 더 써보도록하겠습니다.
Mimetype 검사는 파일 유형을 알고 싶다면 좋은 방법이지만 MIME 유형을 가짜로 만들기가 매우 쉽기 때문에 업로드시 파일을 허용 / 거부하려는 경우 안전하지 않습니다. 시도해보세요. 프록시로 변경하거나 간단한 이미지를 만든 다음 끝에 PHP 코드를 추가하고 이름을 .php로 바꿀 수 있습니다. mimetype 만 확인하는 경우이 .php 파일을 업로드하여 서버에서 실행할 수 있습니다.
PHP 코드가 포함 된 .jpg를 업로드해도 괜찮습니다. 서버는 PHP 파서를 통해 푸시하지 않습니다. (기본 구성을 변경하는 경우는 예외입니다. (Apache : AddType, nginx : AddHandler)
업로드 된 파일을 확인하는 몇 가지 "보안"방법이 있습니다.
이것은 질문의 예이지만 완전한 솔루션을 작성하고 싶습니다. (다음 .
과 같은 파일 이름이있을 수 있으므로 처음 생각 만 확인하는 일반적인 실수 : something.txt.php이므로 항상 마지막 접미사를 확인하십시오.)
$ext = array_pop(explode(".", $fileName));
$whitelist = array('pdf','doc','doc','mkv','mp4','mpg','mpeg','avi','flv','wma','ogg');
if (in_array($ext, $whitelist) {
//OK the extension is good, handle the upload.
} else {
//Wrong type, add error message.
}
이와 같은 것을 사용하는 경우 조심하고 .php와 같은 확장명과 서버 구성에있는 모든 것을 허용하지 마십시오.
이것은 또 다른 좋은 방법이지만 원래 파일 이름, 확장자 및 MIME 유형을 유지하고 싶을 수도 있습니다. 데이터베이스에 저장할 수 있습니다!
이 솔루션의 경우 원래 파일 이름을 가져 와서 임의의 데이터를 추가 한 다음 (하나의 폴더에 업로드하고 something.jpg를 2 번 업로드하려고하면 좋지 않은 생각이므로) 저장합니다. 예를 들면 :
$newName = sha1($fileName.time());
move_uploaded_file($file['tmp_name'], $uploadPath . $newName);
파일에 확장자가 없기 때문에 서버는 파일을 실행하지 않습니다. (하지만 예를 들어 이미지의 경우 브라우저에서 작동합니다. 브라우저에서 mimetype을 사용하여 유형을 결정하고 변경하지 않았기 때문입니다.)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다