2010-07-09 8 views
5

사용자가 mp3 파일을 업로드 할 수있는 웹 사이트를 구축 중입니다. 그리고 파일이 mp3 파일인지 확인하고 싶습니다. 내가 알아야 할 것은 나를 위해서하는 PHP 함수가 있는지입니다.PHP 실제 파일 형식

는 내가 원하는 것처럼 확장자에 따라 파일 형식을 반환하기 때문에 나는이 작동하지 않습니다, $_FILES['uploadedfile']['type']

을 시도하지만

그래서, 질문이 있습니다 (I는 Windows에 그것을 테스트) :

  1. PHP 네이티브 함수로이를 수행하는 안전한 방법은 무엇입니까 ??
  2. 확장자에 따라 파일 유형이 다르거 나 OS와 관련이 있습니까?
  3. 나에게 무엇을 권하고 싶니 ??

감사합니다.

+0

[파일 버전 5.2.9에서 이미지 또는 비디오 유형인지 확인하는 방법?] (http://stackoverflow.com/questions/3074527/how-to-check-whether-file-is-image-or) -video-type-in-php-version-5-2-9)은 getID3에 대해 동일한 근거로 – Gordon

답변

7

1- PHP 네이티브 함수로이를 수행하는 안전한 방법은 무엇입니까 ??

PHP의 경우 네이티브 기능이 아닌 MP3의 경우.

OS의 "MIME 스니핑"기능을 사용하는 fileinfo이 있습니다. 설치되어 있으면 대개 신뢰할 만합니다.

또는 getID3 라이브러리는 MP3 파일에서 정보를 추출 할 수 있다고 주장합니다. 파일에서 재생 시간을 얻을 수 있다면 유효한 MP3 파일 일 가능성이 큽니다.

2 확장명을 기반으로 한 파일 유형은 PHP 문제입니까, 아니면 OS와 관련이 있습니까?

도 아니다. 브라우저는 파일 형식을 결정하고 확장명에 따라 MIME 형식을 보냅니다. 들어오는 데이터와 마찬가지로 위조하기가 쉽고 결코 신뢰할 수 없습니다.

+1

+1을 다룹니다. 이전에 QuickTime 무비에 스트리밍 힌트가 있는지 확인하기 위해 사용했습니다. 매우 유용합니다. –

1

MIME 유형을보고 싶습니다. 이렇게하려면 PHP의 fileinfo 확장이 선호됩니다.

2

나는이 체크 아웃 것이다 :

http://getid3.sourceforge.net/

당신은이 오디오 파일의 것을 확인하고 그것에 대해 정보를 얻기 위해 이것을 사용할 수 있습니다.

1

업로드 한 파일을 열고 처음 몇 바이트를 확인하여 mp3 파일 헤더에 있어야하는 내용과 일치하는지 확인하십시오.

+0

처음 몇 바이트도 ID3이 될 수 있습니다. –

+0

처음 몇 바이트가 될 수 있다고 말하지 않았으므로 이것이 내 답변에 어떻게 적용되는지 잘 모르겠습니다. 이 답변을 다른 답변에 대한 응답으로 사용하지 않았다는 것이 확실합니까? – GrandmasterB

3

MP3가 무엇인지에 대한 질문은 약간 털이 있습니다. MP3 파일은 일반적으로 유효한 MP3 프레임이 아닌 시작 및/또는 끝 부분에 무리가 있습니다. 일반적으로 이것은 ID3 태그를 붙들기위한 것이지만, 다른 이유로 (예 : 순진한 도파리) 말도 안되는 데이터로 MP3를 만나는 것은 드문 일이 아닙니다.

실제로 거의 모든 것이 MP3 일 수 있으며 많은 임의의 이진 파일은 인 MP3 프레임처럼 보입니다.ID3 및 길이 정보 (예 : Pekka의 답)를 찾는 것은 파일이 일 가능성이 높으며, 일 가능성이 높은 좋은 발견 방법입니다.하지만 보안과 관련하여 염두에두면 충분하지 않습니다.

는 확장자에 따라 파일 형식을 반환

윈도우에 따라 결정됩니다 사용자의 웹 브라우저가 보낸 타입 캐릭터,

사실이 반환 (난 단지 창문에 그것을 테스트) 원본 파일 확장자이지만, Mac 또는 Linux의 경우 다른 소스에서 가져온 것일 수 있습니다. 어쨌든 파일 이름 자체와 마찬가지로 신뢰할 수 없습니다. 사용자의 컴퓨터가 잘못 설정되었거나 고의적으로 잘못된 미디어 유형 문자열을 파일에 보낼 수 있습니다.

PHP 네이티브 함수로이를 수행하는 안전한 방법이 있습니까 ??

'안전'에 대한 귀하의 의도는 무엇입니까? 실제로 사이트 간 스크립팅 공격에 HTML, Java 또는 Flash 컨텐츠를 삽입하는 목적으로 실제로 다른 파일 유형 인 MP3 파일을 업로드하는 것을 막으려는 것이 목적이라면이 방법은 현실적으로 불가능합니다. 유효한 MP3 파일을 만들 수 있으며 동시에 다른 유형으로 해석 될 수 있습니다.

마지막으로 XSS 공격으로부터 사용자를 안전하게 보호하는 유일한 방법은 보안 컨텍스트를 공유하지 않는 다른 호스트 이름에서 신뢰할 수없는 사용자 업로드 파일을 제공하는 것입니다 (예 : 'GIFAR'공격을 참조하십시오. 메인 사이트이므로 크로스 사이트 스크립팅은 아무 것도 얻지 못합니다. 페이지의 인라인으로 표시되는 이미지를 호스팅 할 필요가없는 경우 Content-Disposition: attachment 헤더를 사용하여 모든 파일을 제공 할 수도 있습니다.

+0

그래, 나도 몰라. 나는 항상 youtube가 어떤 것을 업로드하게하는지 본다. 그러나 비디오가 아니라면 그것은 당신을 "미안하다"라고 말한다. 나는 내가 원하는 정보가 거의 있다고 생각한다. 감사. – mRt