Programming/Python

[Django] Error django.core.exceptions.SuspiciousFileOperation: Detected path traversal attempt

BadaGreen_Kim 2023. 2. 1. 18:43

Docker 를 이용하여 미디어 파일을 저장하고 있느넫 이부분때문에 엄청난 에러가있었는데 아래 블로그를 통해 해결했다. 정말감사하다.

 

서론

이 글은 Django FileField upload_to Custom 야매 적용기 와 연관된 페이지입니다.
찾으시는 내용이 없을 수 있습니다.

 

Django FileField upload_to Custom 야매 적용기

서론 필자의 개인 프로젝트 간 사용했던 내용을 저장 및 정리 용도로 쓰는 페이지입니다. 찾으시는 내용이 없을 수 있습니다. Crawler -> Crwaler 오타가 있습니다. FileField upload_to Custom 먼저 filefield의

mixedprograming.tistory.com



본론

이전 글의 upload to Custom을 야매로 적용 후 Docker ec2환경에서 적용을 하려고 했더니 제목과 같은 에러가 떴다.

upload_to를 적용하면 대충 /project3/media/~~~/~~~/~~~.png 이렇게 적용되는데
일단 에러 내용을 읽어보면 경로 부분에서 뭔가 에러가 발생했다고 한다.

이에 대한 에러를 찾아보면 경로가 잘못됐다니 경로가 png 확장자까지 들어가야 한다니 이런 말이 있었는데
다 안됐고 비슷한 내용이 있는 사이트를 찾았다

https://code.djangoproject.com/ticket/32718

 

#32718 (Saving a FileField raises SuspiciousFileOperation in some scenarios.)      – Django

#32718 closed Bug (fixed) Saving a FileField raises SuspiciousFileOperation in some scenarios. Reported by: Jakub Kleň Owned by: Mariusz Felisiak Component: Database layer (models, ORM) Version: 2.2 Severity: Release blocker Keywords: 3.2.1 file model fil

code.djangoproject.com


위의 사이트에서 일부 글을 가져와보면

I believe an absolute path outside of Media Root should fail, that is correct (in my opinion) - as an absolute path might be able to write shell scripts around the file system...
It should however, work for a relative file path.

bad_file.name = "/etc/init.d/nameofscript.sh"
# or
bad_file.name = "../../../../../usr/local/lib/bad.file"

절대 경로를 작성하게 되면 외부에서 셸 스크립트라던지 리눅스 내부의 key 파일들을 탐색할 수 있다고 한다.
그러니까 맞는 경로로는 맨 앞의 ' / '를 지우는 것이 이 글의 해결 방법이었다.

/project3/media/~~~/~~~/~~~.png 가 아닌
project3/media/~~~/~~~/~~~.png 이렇게 해야 정상적으로 저장이 가능하다.

 

출처 : 

https://mixedprograming.tistory.com/28