파일 유형별로 디렉토리 내용을 제한하는 방법은 무엇입니까?

파일 유형별로 디렉토리 내용을 제한하는 방법은 무엇입니까?

파일 유형별로 디렉토리 내용을 제한하는 방법이 있습니까?

예를 들어, 업로드 디렉토리가 있고 사용자가 여기에 이미지만 넣을 수 있도록 하고 싶습니다. 한 단계 더 나아가 실제로 이미지만 넣을 수 있도록 제한을 설정할 수 있습니까?

파일 확장자를 확인하기 위해 CRON 작업을 사용하려고 생각했지만 다른 방법이 있는지 궁금합니다.

답변1

cron 작업이나 유사한 작업을 사용하여 "사후"를 강제하는 데에는 여러 가지 문제가 있습니다.

  1. 경쟁 조건. 어떤 방법을 사용하든 디렉터리를 탐색하여 상호 작용을 원하지 않는 파일을 선택하여 사용하는 프로그램이나 코드가 있는 경우 유일한 실용적인 방법은 다음과 같습니다.예방하다이것의 목적은 (1) 이러한 방식으로 코딩하거나(또는 오픈 소스인 경우 기존 소스 코드를 수정하거나) (2) 파일이 해당 디렉토리에 배치되는 것을 허용하지 않는 것입니다.첫 번째.

  2. 어떤 OS를 실행하고 있는지는 밝히지 않았지만 Linux에서는 이를 다소 효과적으로 사용하여 fanotify디렉터리에서 파일 생성/이름 변경을 모니터링하고 파일이 생성되거나 허용되지 않는 항목으로 이름이 변경된 경우를 감지할 수 있습니다. 이름이나 내용이 허용됩니다. 물론 이는 본질적으로 경쟁 조건이므로 해당 디렉터리에 액세스하는 다른 코드가 있고 "사용자"(다른 프로그램 또는 사용자 계정)가 해당 디렉터리에 파일을 저장하는 경우 해당 파일이 선택되는 것을 완전히 막을 수는 없습니다. (그리고 코드가 삭제/이동하기 전에 읽을 수도 있습니다).

내 제안은 다음과 같습니다.

  1. 새 그룹을 만들거나 디렉터리에 원치 않는 파일을 배치하는 프로그램을 실행하지 않도록 신뢰할 수 있는 사용자만 구성원으로 구성된 기존 그룹을 사용하십시오.

  2. 디렉토리의 권한을 770 또는 775 등으로 설정하고 chmod그룹 및 사용자 소유자를 각각 적절하게 설정하십시오 chown. 이렇게 하면 이 그룹 외부의 사용자가 디렉토리에 액세스(또는 쓰기)하는 것을 방지할 수 있으므로 디렉토리에 올바른 파일을 배치할 수 있다고 신뢰하지 않는 프로그램/사용자는 파일 시스템의 임의 액세스 제어 메커니즘에서 제외됩니다. 이는 거의 모든 UNIX 계열 시스템(Windows도 포함하지만 권한 시스템은 약간 다름)에서 작동합니다. 이 디렉터리를 ntfs-3g나 임의 액세스 제어를 무시하는 다른 파일 시스템에 저장하지 않도록 주의하세요.

  3. 서비스 공급자(웹 서비스, UNIX 도메인 소켓 또는무엇)는 파일 내용과 "업로드된" 파일 이름을 허용합니다. 그런 다음 프로그램은 사용자로부터 전체 파일을 수신하고 완전히 다운로드될 때까지 이를 RAM이나 임시 폴더에 저장한 다음 파일 이름과 내용을 확인하여 오류를 발생시킬 수 있는 원치 않는 파일 형식의 파일이 배치되지 않았는지 확인해야 합니다. 디렉토리에. 파일이 정상적으로 나타나면 위의 그룹 제한 디렉터리에 원하는 파일명에 파일 내용을 쓰시면 됩니다.

이전 단락의 "기존 프로그램 사용" 구성 요소에 대해 Google에서 검색한 결과 가능한 해결책은 단 하나뿐이었습니다(심지어 강력하지도 않음): Samba지원 파일 확장자 블랙리스트. 그러나 파일 확장자 검사를 쉽게 우회하기 위해 임의의 콘텐츠가 포함된 모든 파일의 이름을 변경하여 파일 확장자를 포함할 수 있다는 점을 알아야 합니다. 파일 확장자 확인은 사용자가 실수로 실행 파일을 활성화하는 것을 방지하는 데 유용합니다. 예를 들어 .txt라는 실행 파일을 업로드하면 사용자의 텍스트 편집기에서 무해하게 열리며 최악의 결과가 발생합니다. 너무 큽니다. 그러나 확장명이 .exe인 파일을 업로드하는 경우 Windows를 두 번 클릭하면달리기문서).

그러나 파일 확장자 검사만으로는콘텐츠파일 형식은 필수 형식(또는아니요중 하나환영받지 못한다유형). 이렇게 하려면 FTP 서버와 같이 "파일 업로드 시" 사용자 정의 코드를 호출하기 위한 일종의 후크가 필요합니다(상상 이상으로 이런 방식으로 확장할 수 있는 FTP 서버는 모르겠습니다). 그런 다음 file그 결과에 대해 작업을 수행합니다. 예를 들어 UNIX 유틸리티를 호출하여 원하지 않는 유형인지 확인합니다. file무적은 아니지만 식별에는 매우 좋습니다.콘텐츠이름에 관계없이 파일 이름입니다.


마지막으로 생각해 보아야 할 점은 표면적인 측면을 살펴보지 않으면 원치 않는 파일 콘텐츠를 금지하는 것이 훨씬 더 큰 문제라는 것입니다. 예를 들어 PDF 문서로 시작한다고 가정합니다. 이제 파일 형식이 PDF 표준을 위반하도록 PDF 문서를 약간 뒤집습니다. 이 파일을 "간단한" PDF 리더에서 열면 파일 형식이 손상되어 열리지 않습니다. 하지만 "스마트" PDF 리더로 열어보면,가능한손상을 자동으로 감지하고 복구하는 기능! 손상이 심각할 경우 파일 형식 감지기가 이를 PDF 문서가 아닌 것으로 착각할 수 있습니다. 그러나 최종 사용자는 여전히 파일을 열 수 있습니다.

더 나쁜 것은, 원한다면막다특정 파일 콘텐츠나 파일 형식이 전송되는 것을 방지하기 위해 사용자가 이를 우회할 수 있는 방법은 무수히 많습니다. 한 가지 접근 방식은 의도적으로 파일 헤더를 손상시켜 블랙리스트가 파일 형식을 인식하지 못하게 하여 기본적으로 파일 형식을 허용하도록 하거나, 화이트리스트가 있는 경우 파일을 유효한 형식의 파일로 위장하는 것입니다.허용하다입력하고 콘텐츠에 실제 페이로드를 포함시키세요. 협력하는 한 쌍의 사용자(또는 다른 사용자를 원격으로 조종하는 공격자)는 파일을 업로드한 후 다운로드하고, 수신 측에서 내용을 원하는 형식으로 변경한 후 데이터를 사용할 수 있습니다.

이것은 스테가노그래피의 영역으로 들어가며, 멸종된 스테고사우루스 DNA를 사용하여 파일이 특정 유형인지 확인하려고 할 수 있습니다 ;-) (농담입니다. 스테고사우루스는 스테가노그래피와 아무 관련이 없습니다 :)). 스테가노그래피에서 파일은 표면적으로 완전히 합법적인 것처럼 보이며 화이트리스트 필터에 의해 허용될 수도 있습니다. 그러나 공격자는 유효한 것으로 보이는 기존 파일에 임의의 데이터를 숨겨 다른 사용자와 협력하여 전송할 수 있습니다. 파일 형식). 스테가노그래피는 탐지하기 어렵습니다.

그러나 목표가 단순히 "행복한 경로" 파일 형식, 즉 자신이 특정 형식이라고 공개적이고 노골적으로 선언하는 파일을 차단하는 것이라면 file업로드가 허용되는 준비 디렉터리의 파일에 대해 유사한 작업을 사용할 수 있습니다. FTP를 통해 파일이 테스트에 대해 "체크아웃"되면 제한된 디렉터리로 이동할 수 있습니다. 이는 암호화/스테가노그래피 교육을 받지 않은 사용자가 원치 않는 파일 형식을 시스템에 업로드하는 것을 방지하는 데 매우 효과적입니다.

관련 정보