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

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

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


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

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

Leave a Reply

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Related Post

[Django] Django 서버실행 포트변경 및 외부접속 허용[Django] Django 서버실행 포트변경 및 외부접속 허용

Django는 기본 python manage.py runserver 로 실행시 기본 포트번호가 8000으로 지정되어 있다 아래와 같은 방법으로 포트 번호를 변경하거나 외부접속을 허용할 수 있다. 포트번호 변경 python manage.py runserver 8080 외부접속 허용