2011-02-02 5 views
3

파일의 유효성을 검사하는 방법은 파일 확장자에 따라 주장하는 것입니까?파일 유효성 검사는 파일 확장자로 주장하는 것입니다

내 응용 프로그램이 원격 서버에 복사하는 파일 수가 많습니다. 각 파일 복사본을 수행하기 전에 파일 확장자가 실제로 파일임을 확인하고 싶습니다.

지금 사용자는 NSOpenPanel을 사용하여 파일 및/또는 디렉토리를 선택합니다. 일단 파일 배열이 있으면 복사본이 시작되기 전에 물리적으로 존재하는 각 파일을 검증 할 수 있습니다. 나는 소스 디렉토리가 잘 작동하고 모든 파일 취소가있는 FSCopyObjectAsync을 사용하여 복사 작업이 잘 작동하는지 확인합니다.

마지막 부분은이 유효성 검사입니다. 내 사용자는 업로드 할 수있는 항목이 제한되어 있지만 필터는 파일 확장명을 사용하여 완료됩니다. 악의적 인 사용자는 예를 들어, 파일 확장명으로 .doc 파일을 가져 와서 .png 파일로 변경하여 초기 열린 대화 상자 유효성 검사를 통과 할 수 있습니다.

이것은 다소 단순한 예입니다. 파일은 서버에 의해 활용되며 작동하지 않을 파일이 업로드되지 않도록하고 싶습니다.

나는 NSFileManagerattributeOfItems:atPath:을 보았지만 실제 파일 유형에 대한 정보는 제공하지 않는 것 같습니다. 파일 유형은 디렉토리, 심볼릭 링크 등의 파일 유형 만 반환합니다.

나는 모든 파일을 열고 검증하지 않고 파일 헤더를 읽고 파일 유형 스펙을 준수하는지 확인하려고합니다.

이것은 iOS 앱이 아닙니다.

옳은 방향으로 도움이되거나 도움이되는 정보가 있으면 감사하겠습니다.

답변

0

기본적으로 아니요. 파일 시스템은 파일에 대해 매우 제한된 몇 가지 사항만을 알고 있습니다. 더 많은 메타 데이터가 연관 될 수 있지만 대부분의 경우 메타 데이터가 존재할 수 없으며 어떠한 경우에도 메타 데이터가 존재할 수 없습니다. 파일에 실제로 그것이 주장하는 내용이 포함되어 있는지 확실히 알고 싶다면 파일을 열어 봐야합니다.

파일 형식 및 신뢰 수준에 따라 전체 내용을 볼 필요가 없습니다. 예를 들어, 파일의 첫 번째 바이트에 매직 번호가 있거나 다른 헤더 정보가있어 사용자를 설득 할 수 있습니다. 그러나 그들의 존재가 파일이 "작동 할"것을 보장하지는 않습니다.

+0

그런 다음 파일의 헤더를여십시오. :-(하지만 적어도 그것은 해결책이다. – Hooligancat

1

/usr/bin/file --mime을 실행하여 MIME 형식을 가져올 수 있습니다.

+0

케빈 - 시도해 볼 가치가 있지만 행운이 없습니다. jpg를 png로 이름을 바꿨고 --mime이 jpg 대신 png로보고됩니다. 그래도 좋은 생각. – Hooligancat

3

libmagic 또는 libmagic 주위의 Objective-C wrapper 인 MagicKit을 사용할 수 있습니다. MagicKit은 주어진 파일의 UTI 또는 MIME 유형을 반환 할 수 있습니다.

+0

감사합니다. Bavarious, 이것이 작동하는 한, 우리가 제 3 자 소프트웨어를 사용함에있어 상업적으로 시사하는 바가 있습니다. 그래서 이것은 비 스타터가 될 것입니다. (비록 미래의 프로젝트를 위해 도움이 될지 모르지만) – Hooligancat

+0

Bavarious - 나는 그것을 되 찾습니다. MagicKit은 MIT 라이센스이므로 MOGHT 작업이 가능합니다. 그것을 확인하고 알려 드리겠습니다. – Hooligancat

관련 문제