MP3가 무엇인지에 대한 질문은 약간 털이 있습니다. MP3 파일은 일반적으로 유효한 MP3 프레임이 아닌 시작 및/또는 끝 부분에 무리가 있습니다. 일반적으로 이것은 ID3 태그를 붙들기위한 것이지만, 다른 이유로 (예 : 순진한 도파리) 말도 안되는 데이터로 MP3를 만나는 것은 드문 일이 아닙니다.
실제로 거의 모든 것이 MP3 일 수 있으며 많은 임의의 이진 파일은 의 인 MP3 프레임처럼 보입니다.ID3 및 길이 정보 (예 : Pekka의 답)를 찾는 것은 파일이 일 가능성이 높으며, 일 가능성이 높은 좋은 발견 방법입니다.하지만 보안과 관련하여 염두에두면 충분하지 않습니다.
는 확장자에 따라 파일 형식을 반환
윈도우에 따라 결정됩니다 사용자의 웹 브라우저가 보낸 타입 캐릭터,
사실이 반환 (난 단지 창문에 그것을 테스트) 원본 파일 확장자이지만, Mac 또는 Linux의 경우 다른 소스에서 가져온 것일 수 있습니다. 어쨌든 파일 이름 자체와 마찬가지로 신뢰할 수 없습니다. 사용자의 컴퓨터가 잘못 설정되었거나 고의적으로 잘못된 미디어 유형 문자열을 파일에 보낼 수 있습니다.
PHP 네이티브 함수로이를 수행하는 안전한 방법이 있습니까 ??
'안전'에 대한 귀하의 의도는 무엇입니까? 실제로 사이트 간 스크립팅 공격에 HTML, Java 또는 Flash 컨텐츠를 삽입하는 목적으로 실제로 다른 파일 유형 인 MP3 파일을 업로드하는 것을 막으려는 것이 목적이라면이 방법은 현실적으로 불가능합니다. 유효한 MP3 파일을 만들 수 있으며 동시에 다른 유형으로 해석 될 수 있습니다.
마지막으로 XSS 공격으로부터 사용자를 안전하게 보호하는 유일한 방법은 보안 컨텍스트를 공유하지 않는 다른 호스트 이름에서 신뢰할 수없는 사용자 업로드 파일을 제공하는 것입니다 (예 : 'GIFAR'공격을 참조하십시오. 메인 사이트이므로 크로스 사이트 스크립팅은 아무 것도 얻지 못합니다. 페이지의 인라인으로 표시되는 이미지를 호스팅 할 필요가없는 경우 Content-Disposition: attachment
헤더를 사용하여 모든 파일을 제공 할 수도 있습니다.
[파일 버전 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