-
5월 25일 TIL - CSRF 오류 해결!TIL(Today I Learned) 2023. 5. 25. 21:27
▷ 오늘의 일정
09:10 ~ 12:00 배포 처음부터 시작! 12:00 ~ 13:00 점 심 식 사 13:00 ~ 18:00 배포 오류잡자~ 18:00 ~ 19:00 저 녁 식 사 19:00 ~ 20:40 하루 공부 내용 정리 및 TIL 20:40 ~ 21:00 하루 공부 내용 공유 ▷ 오늘의 배움
요 며칠 배포를 한다고 이것저것 막 만졌던 것 같다. ec2에 mysql 구축한다고 아주 난리를 했는데 따로 구축 안하고 rds를 사용해주면 된다고 하였다... rds 인스턴스를 생성하고 연결하면 알아서 자동으로 된다고 한다... 아주... 멋지다.... 좋다.... 짱이다.. 다만 그 pip install -r requirements.txt를 할 때 항상 mysqlclient 설치가 말성이었는데 그렇게 설치하지 않고
sudo apt-get update sudo apt-get install mysql-client
이렇게 명령어를 실행해 주면 깔끔하게 깔린다.. 아주 좋다..
▷ 오늘의 시도
오늘 인스턴스를 생성하고 깃 풀을 받고 테스트로 런서버를 돌려보려는데 데이터베이스 접속 오류가 발생하였다. 데이터 베이스 Host가 로컬 주소 되어있었다. RDS를 연동할 생각이었기에 EC2 인스턴스를 만들고 RDS 인스턴스를 만들 때 같이 연결해 주고자 했다. 하지만 데이터베이스를 인식하는데 문제가 생겼고 어떡해야 하나 고민을 하던 찰나 팀원분께서 구제해 주셨다. 런서버만 안될 뿐이지 EC2의 인스턴스 자체는 생성이 됐기 때문에 RDS 인스턴스를 생성할때 연결하여 생성해주었다. RDS 인스턴스를 생성하고 디비버로 연동이 되는지 확인해보려고 했지만 타임아웃 에러가 발생하였고 왜 이게 안되나 고민하던 찰나 먼저 EC2 터미널에서 연결이 됐는 지 확인해보자고 하셔서 mysql을 실행해 주고 테이블 확인을 하였다.
# mysql-client에 입력 후 확인 mysql -h <rds endpoint> -u <username> -p
flowery 테이블이 잘 들어와 있는 것을 확인하고 아 잘 연동 됐구나 싶었다. 마이그레이션을 해주고 데이터 베이스 Host를 RDS 인스턴스의 Endpoint로 바꿔주니 정상 작동하는 것을 확인 할 수 있었다! 오늘은 기필코 배포를 완료해보자! 희망이 보인다🤩
자 이제 배포 끝이 보인다. 다시 엊그제 부딪힌 오류를 마주쳤다. 어드민에 로그인을 하면 이 오류가 함께 발생한다. 왜일까?
CSRF 공격은 Cross-site request forgery 공격의 약자로, 사용자가 자기 의지와는 상관없이 공격자가 의도한 행위를 특정 웹사이트에 요청하게 하는 방식으로 수행하는 공격이다.
먼저 기존에 CSRF_TRUSTET_ORIGINS가 정의되어있었다. 또한 CSRF_COOKIE_SECURE = True인 상태였다.
# settings.py CORS_ALLOW_ALL_ORIGINS = True CORS_ALLOW_CREDENTIALS = True CSRF_COOKIE_SECURE = True SESSION_COOKIE_SECURE = True CSRF_TRUSTED_ORIGINS = [ "http://localhost:3000", "http://127.0.0.1:8000", "http://127.0.0.1:3000", "3.38.105.28", ] ALLOWED_HOSTS = [ "localhost", "127.0.0.1", "3.38.105.28", ]
그래서 CSRF_COOKIE_SECURE = False로 바꿔주고 CSRF_TRUSTET_ORIGINS은 WHITELIST로 정의해주었다. CORS_ORIGIN_WHITELIST는 cross-site HTTP 요청을 할 수 있는 권한이 주어지는 origin들의 리스트이다. default는 []이다. 이렇게 바꿔주니 접근이 가능하였다. 하지만 403 오류를 해결하고 나니 두둥 로그인을 하면 새로고침 상태가 된다. 어떠한 결과값도 안오는 형태가 되었다... 왜이런고... 하니 생소한 SESSION_COOKIE_SECURE = True를 없애줬다. 그랬더니 두둥! 로그인이 되었다. 모든 오류는 settigns.py에서 발생했고 해결되었다. 역시 뭐든 잘 설정하자! 시간이 남으면 제대로 정리를 해볼 필요가 있다고 생각 된다. 화이팅
# settings.py 수정 CORS_ALLOW_ALL_ORIGINS = True CORS_ALLOW_CREDENTIALS = True CSRF_COOKIE_SECURE = False # SESSION_COOKIE_SECURE = True ''' CSRF_TRUSTED_ORIGINS = [ "http://localhost:3000", "http://127.0.0.1:8000", "http://127.0.0.1:3000", "3.38.105.28", ] ''' ALLOWED_HOSTS = [ "localhost", "127.0.0.1", "3.38.105.28", ] CORS_ORIGIN_WHITELIST = ["http://3.38.105.28", "http://localhost","http://127.0.0.1"] CSRF_TRUSTED_ORIGINS = CORS_ORIGIN_WHITELIST
'TIL(Today I Learned)' 카테고리의 다른 글
5월 29일 TIL - 머신러닝 프로젝트 마무리 (0) 2023.05.29 5월 26일 TIL - 제발 배포 제발 (0) 2023.05.27 5월 24일 TIL - MySQL error (1) 2023.05.24 5월 23일 TIL - Django to EC2(1) (1) 2023.05.23 5월 22일 TIL - 새로운 프로젝트 시작 (0) 2023.05.22