Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

백엔드 염종섭 https 설정과 cors 설정 과제입니다. #8

Open
YeomJongSeop opened this issue May 20, 2024 · 1 comment
Open

Comments

@YeomJongSeop
Copy link
Collaborator

YeomJongSeop commented May 20, 2024

키워드 과제1
URL vs. Origin vs. Domain의 개념과 관계

  • URL (Uniform Resource Locator): 인터넷에서 자원의 위치를 나타내는 문자열 (예): https://lionz12.netlify.app/homework.
  • Origin: 프로토콜, 호스트명, 포트를 포함하여 자원의 출처를 나타냄 (예): https://lionz12.netlify.app (포트가 명시되지 않으면 기본 포트 사용).
  • Domain: 호스트명에서 도메인 부분만을 나타냄. 예: netlify.app.
    세 키워드 간의 관계는 다음과 같습니다:
  • URL은 자원의 구체적인 위치를 나타내며, Origin과 Domain을 포함
  • Origin은 보안 및 동일 출처 정책을 결정할 때 중요, 동일한 Origin을 가진 URL들은 동일 출처로 간주됨
  • Domain은 네트워크 상의 특정 웹사이트를 가리키며, Origin의 하위 개념

키워드 과제2
같은 출처? 다른 출처?
https://lionz12.netlify.app와 아래의 URL을 비교하여 같은 출처인지, 다른 출처인지, 그 이유는 무엇인지 간략하게 작성
image

키워드 과제3
Access-Control-Allow-Origin: * 의미와 설정 시 발생할 수 있는 일

  • 의미: Access-Control-Allow-Origin: *는 모든 도메인에서 이 리소스에 접근할 수 있음을 의미한다. 즉, 이 설정은 Cross-Origin Resource Sharing (CORS)를 통해 모든 도메인의 요청을 허용하는 것이다.
  • 발생할 수 있는 일:
    • 보안 위험: 모든 도메인에서 접근할 수 있게 되므로, 악의적인 사이트에서도 이 리소스를 자유롭게 이용할 수 있다. 이는 민감한 데이터가 포함된 API나 리소스를 노출할 경우 보안 위험을 초래할 수 있다.
    • 데이터 유출: 공격자는 이 설정을 이용해 CSRF(Cross-Site Request Forgery)나 XSS(Cross-Site Scripting)와 같은 공격을 통해 사용자의 데이터를 탈취할 수 있다.
    • 브라우저 성능 저하: 모든 도메인에서 요청을 허용하게 되면, 많은 양의 요청이 서버에 도달하여 서버 성능이 저하될 수 있다.

키워드 과제4
CSRF(Cross-Site Request Forgery)와 Django에서의 방어 방법

  • CSRF(Cross-Site Request Forgery):
    • 정의: CSRF는 사용자가 인증된 세션을 가지고 있는 동안 공격자가 사용자의 권한을 이용해 웹 애플리케이션에 비정상적인 요청을 보내는 공격이다. 예를 들어, 사용자가 특정 웹사이트에 로그인한 상태에서 악의적인 사이트를 방문하면, 그 사이트가 사용자의 권한으로 원하지 않는 요청을 보낼 수 있다.
    • 원리: 공격자는 사용자의 브라우저가 인증된 상태임을 이용하여, 사용자가 모르게 악의적인 요청을 보낸다. 이 요청은 사용자의 세션 쿠키를 포함하여 서버에 전송되므로 서버는 이를 정상적인 요청으로 간주하게 된다.
  • Django에서의 CSRF 방어 방법:
    • CSRF 토큰 사용: Django는 기본적으로 모든 POST 요청에 대해 CSRF 토큰을 사용하여 방어한다. 이 토큰은 폼에 숨겨진 입력 필드로 포함되며, 서버는 요청 시 이 토큰의 유효성을 검증한다.
    • @csrf_protect 데코레이터: 뷰 함수에 이 데코레이터를 사용하여 CSRF 공격을 방지할 수 있다. 모든 POST 요청에 대해 CSRF 토큰이 올바르게 포함되어 있는지 확인한다.
    • @csrf_exempt 데코레이터: 특정 뷰에서 CSRF 검사를 비활성화할 수 있지만, 이는 매우 위험할 수 있으므로 주의해서 사용해야 한다.
    • CSRF_COOKIE_HTTPONLY 설정: Django 설정 파일에서 CSRF_COOKIE_HTTPONLY를 True로 설정하여 CSRF 쿠키를 JavaScript로 접근할 수 없게 한다.
    • Referer 헤더 확인: Django는 기본적으로 Referer 헤더를 확인하여 요청이 올바른 출처에서 왔는지 검증한다.
      CSRF 공격을 방어하기 위해 Django에서는 다양한 보안 기능을 제공하고 있으므로, 이를 잘 활용하여 애플리케이션의 보안을 강화하는 것이 중요하다.
@juwon0403
Copy link

juwon0403 commented May 23, 2024

정리까지 아주 깔끔하게 구웃b
csrf 공격을 방어하는 여러 방법들에 대해서는 저도 배워가용

+) 2번 과제인 https 설정한 화면도 캡쳐해서 올려줘야 돼!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants