[기술면접] 20일차 문답 | CORS오류, 배포 관련
💡 Django 프로젝트 진행 시 발생하는 CORS 오류를 처리하는 방법에 대해서 설명하시오
CORS(Cross-Origin Resource Sharing) 오류는 웹 애플리케이션에서 발생하는 보안 정책 중 하나로,
다른 도메인에서 오는 요청을 차단하는 정책입니다.
1. pip install django-cors-headers django-cors-headers를 설치,
INSTALLED_APPS, MIDDLEWARE에 cors설정을 추가, 그외 CORS설정에 도메인을 추가합니다.
CORS_ALLOW_ALL_ORIGINS = False
CORS_ALLOWED_ORIGINS = [ "https://example.com", ]
2. 서버 측 설정 변경:
서버 측에서는 웹 서버 설정을 조정하여 CORS 오류를 처리할 수 있습니다. 웹 서버(Apache, Nginx 등)의 설정 파일에서 CORS 관련 헤더를 추가하거나 수정하여 요청을 허용할 도메인을 설정합니다.
3. Django 내장 Middleware 사용: Django에는 django.middleware.csrf.CsrfViewMiddleware 미들웨어가 내장되어 있습니다. 이 미들웨어가 CSRF(Cross-Site Request Forgery) 공격을 방어하기 위해 요청에 대한 CSRF 토큰을 확인하는 역할을 하기도 합니다. 때로는 CORS 오류를 처리할 때 CSRF 미들웨어와의 충돌이 발생할 수 있습니다.
이 경우, 해당 미들웨어를 조정하거나, 프론트엔드 요청에서 CSRF 토큰을 함께 보내는 등의 조치를 취하여 해결할 수 있습니다.
💡 Django 프로젝트를 배포할 때 Allow Host에 * 가 들어가면 안되는 이유는?
ALLOW_HOST는 어떤 호스트(도메인)에서 Django 애플리케이션에 접근할 수 있는지를 나타내는 설정입니다. 개발 환경에서는 편의상 *를 사용하기도 하지만, 배포 시 모든 host를 허용하는 것은 보안상 취약점이 있어 실제로 사용할 도메인 명이나 ip주소를 지정해주어야합니다.
- 호스트 헤더 공격(Canonical Host Header Attack): 악의적인 사용자가 호스트 헤더를 조작하여 다른 사이트로 요청을 보낼 수 있습니다. 이를 통해 사이트 간 요청 위조(CSRF) 공격 등이 가능해집니다.
- 도메인 병렬 공격(Domain Parallel Attack): ***** 를 사용하면 악의적인 사용자가 여러 도메인에 대해 Django 애플리케이션을 사용할 수 있게 됩니다. 이로 인해 사이트 내 보안 기능을 우회하는 공격이 가능해집니다.
- 보안 허점 노출: 특정 도메인만을 허용하는 것은 애플리케이션을 지정한 도메인에만 제한적으로 사용하도록 보안을 강화할 수 있습니다. **ALLOWED_HOSTS**에 특정 도메인만 등록하는 것은 악의적인 요청을 차단하고 애플리케이션의 보안을 강화하는데 도움이 됩니다.
💡 HTTP가 아닌 HTTPS로 배포했을 때의 장점에 대해 설명하시오
HTTPS는 데이터 암호화와 보안 인증을 제공하는 웹 통신 프로토콜입니다.
HTTPS로 배포하면 데이터의 기밀성과 무결성이 보장되어 정보 유출이나 중간자 공격을 예방할 수 있고,
사용자 신뢰성과 SEO(검색엔진 최적화) 랭킹 향상에도 기여합니다.