2012-03-17 3 views
2

업로드 된 이미지를 처리하는 가장 좋은 방법은 GD 라이브러리를 사용하여 이미지를 "다시 처리"하고 처리 된 이미지를 저장하는 것입니다. 참조 : PHP image upload security check list

제 질문은이 "재 처리"가 GD입니다. 이것은 정확히 무엇을 의미합니까? 나는 GD 라이브러리를 잘 모른다. 나는 그것을 망칠 까봐 두려워한다. ...이미지 업로드 보안 - GD로 재 처리

그렇다면이 일을 한 사람이라면 누구에게나 내가이 모범을 보여줄 수 있겠는가?

(내가 아는 한 다른 옵션은 ImageMagick을 사용하는 것입니다. ImageMagick의 경우 여기에서 대답을 찾았습니다 : Remove EXIF data from JPG using PHP,하지만 지금은 ImgMagick을 사용할 수 없습니다 .. 그런데 .. EXIF ​​데이터를 제거한다는 것은이 이미지를 완전히 다시 만드는 것을 의미합니다. ?. 사람이 관심이 있다면 경우)
(내가 젠드 프레임 워크를 사용하고 있습니다)

답변

4

을 사용자가 JPEG 파일을 업로드하는 경우, 당신은 그것을 재 처리 같은 것을 할 수 있습니다 :

$newIm = @imagecreatefromjpeg($_FILES['file']['tmp_name']); 
if (!$newIm) { 
    // gd could not create an image from the source 
    // most likely, the file was not a valid jpeg image 
} 

그런 다음 폐기 할 수 이미지는 imagedestroy()을 사용하고 사용자가 업로드 한 파일을 사용하거나 GD에서 이미지를 저장하고 사용하십시오. 원본 이미지가 아닌 GD 이미지를 저장하면 문제가 발생할 수 있습니다.

또 다른 간단한 방법은 이미지 파일의 헤더 (처음 몇 바이트)가 올바른지 확인하는 것입니다. 예를 들어 모든 JPEG 파일은 0xff 0xd8으로 시작합니다.

도 참조하십시오. imagecreatefromstring()을 참조하십시오. 또한 getimagesize()을 사용하여 업로드 된 이미지에서 유사한 검사를 실행할 수 있습니다.

+0

견적 (getimagesize) "주의 이 함수 이름이 올바른 이미지 파일이 될 것으로 예상하고있다. 비 화상 파일이 공급되면, 잘못 이미지로 검출 될 수 있고, 함수가 성공적으로 복귀되지만 배열에 무의미한 값이 포함될 수 있습니다. getimagesize()를 사용하여 지정된 파일이 올바른 이미지인지 확인하지 말고 대신 Fileinfo 확장과 같은 특수 목적 솔루션을 사용하십시오. " –

2
function isvalidjpeg($file) 
{ 
$finfo = finfo_open(FILEINFO_MIME_TYPE); 
return is_resource($finfo) && 
     (finfo_file($finfo, $file) === 'image/jpeg') && 
     finfo_close($finfo); 
} 
if(isvalidjpeg($_FILES['file']['tmp_name'])) { 
    $newIm = @imagecreatefromjpeg($_FILES['file']['tmp_name']); .....