2008-10-28 2 views
4

확장 프로그램을 사용하지 않고 업로드 된 파일의 형식을 안정적으로 확인하는 방법은 무엇입니까? 나는 당신이 헤더를 검사해야한다는 것을 짐작하거나 바이트의 일부를 읽지 만, 나는 그것에 대해 어떻게 해야할지 전혀 모른다. 임 C#과 asp.net를 사용하여.업로드 된 파일의 확장자에 의존하지 않고 내용을 확인하는 방법은 무엇입니까?

어떤 조언을 주셔서 감사합니다. 확인


, 그래서 위의 링크에서 나는 지금은 긍정적으로 예를 들어 .jpg 파일을 식별하는 'FF로 D8 FF E0'을 찾고있는 것을 알고있다. 내 코드에서

내가 처음 이십 바이트에게 문제 읽을 수 있도록 (여기 내 총 경험 부족을 용서하시기 바랍니다)

   FileStream fs = File.Open(filePath, FileMode.Open); 
       Byte[] b = new byte[20]; 
       fs.Read(b, 0, 20); 

을하지만 어떻게 바이트 배열이 포함되어 있는지 여부를 확인합니까 'FF로 D8 FF E0' ?

답변

3

다음은 게시 된 후속 질문에 더러운 빠른 - 응답의 :

byte[] jpg = new byte[] { 0xFF, 0xD8, 0xFF, 0xE0 }; 
bool match = true; 
for (int i = 0; i < jpg.Length; i++) 
{ 
    if (jpg[i] != b[i]) 
    { 
     match = false; 
     break; 
    } 
} 
1

파일의 처음 몇 바이트는 종종 파일 유형을 알려줍니다.
http://www.garykessler.net/library/file_sigs.html
http://www.astro.keele.ac.uk/oldusers/rno/Computing/File_magic.html

사용 System.IO가 업로드 한 후 바이너리로 부전승을 읽고, 예를 들어, 참조하십시오.

궁금한데 왜 ContentType 헤더에 의존 할 수 없습니까?

+0

저는 바이너리로 모든 것을 스트리밍하는 구성 요소를 사용하고 있기 때문에! – flesh

+0

첫 번째 링크는 두 번째 링크보다 훨씬 포괄적입니다. –

+2

클라이언트가 적대적이며 의도적으로 잘못된 Content-Type을 공격의 일부로 주장 할 수 있으므로 Content-Type에 의존 할 수 없습니다. 트러스 팅 Content-Type은 파일 확장자를 신뢰하는 것보다 조금 나은 점이 있습니다. –

2

실제로는 유닉스 file 프로그램이하는 일이나 그 정도는 더 높거나 낮습니다. 부분적으로는 파일을 검색하려는 프로그램이 파일 헤더를 내보내는 지 여부에 달려 있습니다. 프로그램 tar은 이렇게하지 않는 것으로 유명합니다. 시도하려는 파일의 유형에 따라 달라 지지만 file 구현을 사용하는 것이 가장 간단 할 수 있습니다. 그것은 많은 파일 유형을 인식하고 최신 버전은 다양한 시나리오를 처리 할 수있는 추가 파일 유형 정의 파일을 통해 확장 가능합니다.

1

Wotsit은 다양한 파일 형식의 마법 번호를 찾는 데 유용한 자료입니다.

0

파일의 내용을 읽기 바보 증거 방법입니다. .Net에서 빌드하기 때문에 업로드 된 파일의 MIME 유형을 확인할 수 있습니다.

DllImport urlmon.dll을 사용하여 도움을받을 수 있습니다. 다음 주소의 게시물을 참조하십시오. http://coding-passion.blogspot.com/2008/11/validating-file-type.html

콘텐츠 유형에 관해 명확히 설명하기 위해, 파일의 확장자에 의해 결정됩니다. 그래서 .zip 파일조차도 확장자가 .txt로 바뀌 었습니다. 컨텐트 유형은 여전히 ​​Text 만 말합니다.

관련 문제