2015-02-07 2 views
1

PHP 설명서에 따르면 $_FILES['userfile']['type']이 클라이언트의 제어하에 있습니다 (어쩌면 편집 할 수 있습니다). php manual.업로드 된 파일의 보안 유형을 확인하려면 어떻게해야합니까

$_FILES['userfile']['type']
파일의 MIME 타입

, 브라우저가이 정보를 제공 할 경우.
예는 'image/gif'입니다.
그러나이 MIME 유형은 PHP 측에서 확인되지 않으므로 해당 값을 당연시하지 않습니다.

이것은 :

당신이 있기 때문에, 특정 유형의 기준에 맞지 않는 파일을 버릴 있지만 검사의 시리즈의 첫 번째로 사용하는 $_FILES['userfile']['type'] 변수를 사용할 수 있습니다 값은 클라이언트의 제어하에 있으며 PHP 측에서 확인되지 않습니다.



그래서 나는 유해한 파일을 방지하기위한 업로드 된 파일의 종류를 확인하는 방법을 업로드 할?

+1

? 악성 코드, 자바 스크립트? 파일을 실행하지 않는 한 서버 측은 어쨌든 올바르게 저장됩니다. –

+0

당신은 복사하여 정확한 방법을 확인하는 방법에 붙여 넣었습니다 .... –

+0

당신은 복사하여 정확한 방법을 확인하는 방법에 붙여 넣었습니다 .... –

답변

2

직접 발견 한 바와 같이 보안 문제가 발생하지 않도록 각 파일을 철저히 확인해야합니다.

대부분 어떤 종류의 파일을 허용할까요? 이 두 단계로 진행할 것입니다.

1. 콘텐츠 유형을 확인하십시오.

여기에 아무 것도 추가하지 않아도됩니다. 이미 질문에 답변 해 주셨습니다. 그러나 이것은 위조 일 수 있으므로 잊지 마시기 바랍니다.

2. 파일 내용을 확인하십시오.

파일 내용을주의 깊게 확인해야합니다. 이미지를 다루는 경우, phps 이미지 기능을 사용하여 안전한면에있을 수 있습니다.

예 :

$x = getimagesize($_FILES['uploadfile']['tmp_name']); 
if (isset($x)) { 
    if($x['mime'] != 'image/gif' && $x['mime'] != 'image/jpeg') { 
     echo 'Not a valid GIF or JPEG'; 
     exit(0); 
    } 
} 
검사 할 않는 harmfull 파일이 어떤 종류의
+0

정말 고마워요. – Elec

+1

헤더 또는 MIME 형식을 속여서 원하는 것을 업로드하는 것을 방지하는 방법을 정말로 모르겠습니다. –

+0

부울 표현식은 왼쪽에서 오른쪽으로 검사되므로'isset ($ x)'가 첫 번째 여야합니다. – Gumbo

관련 문제