파일의 확장명을 확인하고 mime 유형 - 파일 업로드가 안전하도록 다른 작업이 있습니까?PHP에서 안전한 파일 업로드 스크립트를 만드는 방법은 무엇입니까?
아바타 용입니다 (모든 이미지가 하나의 폴더에 있음). htaccess를 사용하여 php 실행을 금지하는 방법을 생각해 보았습니다. 어떻게 생각해?
파일의 확장명을 확인하고 mime 유형 - 파일 업로드가 안전하도록 다른 작업이 있습니까?PHP에서 안전한 파일 업로드 스크립트를 만드는 방법은 무엇입니까?
아바타 용입니다 (모든 이미지가 하나의 폴더에 있음). htaccess를 사용하여 php 실행을 금지하는 방법을 생각해 보았습니다. 어떻게 생각해?
파일 확장자와 MIME 유형 모두 이미지 파일을 다루는 보안 성을 100 % 제공하지 못합니다. 하지만 파일을 실행하지 않는 한 (예 : include() 사용) 문제가되지 않으므로 PHP 코드 또는 다른 것을 확인할 필요가 없습니다. 위조 된 이미지 파일을 사용하여 상상할 수있는 유일한 보안 침해는 브라우저의 렌더링 엔진 을 악용하는 것일 수 있습니다. 이것은 서버 측으로부터 효과적으로 보호 할 수 없으며 브라우저 공급 업체의 책임입니다.
따라서 업로드를 처리 할 때 is_uploaded_file()
및 move_uploaded_file()
을 사용해야하는 경우 최소한 이미지 형식 앞에 있어야합니다. 아래의 @ bobince의 게시물을 읽고 링크를 따라 가면 파일을 다룰 때 다른 보안 측면에 대한 많은 정보를 얻을 수 있습니다.
그러나 최대 보안을 제공하는 것은 물론 GD의 imagecopy을 사용하여 이미지를 새 이미지 컨테이너로 복사 할 수도 있습니다. 이렇게하면 파일에 포함 된 ID3 및 기타 헤더 정보가 지워지고 악용 시도가 파기됩니다 (GD는 이러한 파일을 숨기고 오류를 반환합니다). 물론 GIF, JPEG 및 PNG에서만 작동하며 알파 채널 및 색상 프로필 문제와 같은 문제가 발생할 수 있습니다.
절대 사용자가 제출 한 파일 이름을 사용하지 마십시오. «난수».jpeg와 같은 새로운 것들을 만들어라. '살균'파일 이름은 생각보다 어렵습니다. 특히 앱이 Windows 서버에서 실행될 수 있어야하는 경우 더욱 그렇습니다.
이미지의 경우 매우 신뢰할 수없는 파일 이름 및 MIME 형식 제출을 보지 말고 이미지의 파일 유형을 결정하려면 PHP getimagesize
함수를 사용하십시오. 이미지로 구문 분석하지 않는 업로드를 허용하지 않습니다.
다운로드 할 파일의 경우 Content-Disposition: attachment
헤더를 사용하여 HTML 콘텐츠에 대한 IE 스니핑을 중지하고 브라우저에 표시합니다.
인라인으로 표시해야하는 파일의 경우 기본 호스트와 다른 호스트 이름에서 파일을 제공해야합니다. 그렇지 않으면 HTML 내용이 보안 컨텍스트에 사이트 간 스크립트로 표시 될 수 있습니다. 안전한 파일 업로드 기능을 만들기
는 하드입니다. More discussion.
3에 대해 몰랐습니다. 훌륭한 팁과 훌륭한 링크. –
+1 이미지를 복사하는 경우. –