CSRF 란?

Cross-Site Request Forgery의 줄임말로 HTML 안에 또 다른 HTML 코드를 넣어 사용자가 의도하지 않은 동작을 하도록 만드는 공격방법으로 사용자의 쿠키 등 정보를 훔쳐가는 등 사이트와 서버간 요청시 들어와 불법적인 행동을 수행한다.

 

{% csrf_token %} 를 사용하여 방지할 수 있다.

 

CSRF 토큰은 서버와 클라이언트 간에서 사용 방식

서버는 세션에 CSRF 토큰을 집어넣고 웹 페이지를 생성할 때 CSRF 토큰을 포함시킵니다. 사용자가 액션을 수행할 때 이 CSRF 토큰을 요청과 함께 전송하면 서버에서 일치하는지 확인합니다. 이때 일치하지 않는다면 해당 접근을 공격으로 인식하고 요청을 거절합니다.

 

토큰이 발급되는 위치

CSRF 토큰은 서버 측에서 생성되어 템플릿을 통해 클라이언트로 전달됩니다.

주로 템플릿을 통해 폼에 포함되거나 AJAX 요청의 헤더에 추가되어 클라이언트와 서버 간의 요청의 안전성을 확보합니다.

 

1. 템플릿을 통해 폼에 포함되는 경우

  1. form 에서 request.method 가 post 일때 넣어줍니다.

2. js ajax에서 POST를 통해 보내는 경우에 요청 헤더에 포함시키는 경우

// jQuery를 사용하는 예시
$.ajax({
    url: '/some-url/',
    type: 'post',
    headers: {
        'X-CSRFToken': '{{ csrf_token }}'
    },
    data: { /* 요청 데이터 */ },
    success: function(response) {
        // 응답 처리
    }
})

'Development > WEB' 카테고리의 다른 글

캐시,세션,쿠키  (0) 2023.08.11
HTTP, HTTPS  (0) 2023.08.11

배경

상태/정보 확인을 위해 항상 HTTP 요청을 보내는 경우 문제 발생

  • 서버의 부하가 커지고 응답시간이 증가하는 등의 성능저하가 일어나 비용이 증가하고 UX 도 저하된다.

=> 쿠키, 세션, 캐시 사용으로 문제 해결

 

캐시

  • 저장위치: 클라이언트
  • 데이터 크기: 제한 있음
  • 보안성: 클라이언트에서 접근 가능 (보안성 낮음)
  • 유효 기간: 캐시의 유효기간에 따름
  • 사용 목적: 성능 향상 및 대역폭 절약 (ex.이미지,css,js 파일 등)

세션

  • 저장위치: 서버
  • 데이터 크기: 제한 없음
  • 보안성: 클라이언트에서 직접 접근 불가 (보안성 높음)
  • 유효 기간: 세션 종료 시 삭제
  • 사용 목적: 상태 유지 및 사용자 인증 (ex. 로그인 유지)

쿠키

  • 저장위치: 클라이언트
  • 데이터 크기: 제한 있음
  • 보안성: 클라이언트에서 접근 가능 (보안성 낮음)
  • 유효 기간: 쿠키의 만료기간에 따름
  • 사용 목적: 상태 유지 개인화

※  오류 코드

5xx 대의 오류 : 서버의 문제

4xx 대의 오류 : 클라이언트 쪽의 문제

1xx 대의 오류  : 처리중이거나 추가 정보를 요청하는 경우

3xx 대의 오류 : 요청 완료에 추가적인 조치가 필요하거나 리다이렉션 하는 경우

'Development > WEB' 카테고리의 다른 글

CSRF  (0) 2023.08.21
HTTP, HTTPS  (0) 2023.08.11

HTTP(HyperText Transfer Protocol)

HTTP 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트-서버 프로토콜이다.

웹에서 데이터를 주고 받을 때, 파일을 서버에서 다운 받을 때, API를 요청할 때 등 사용된다.

 

HTTP의 주요 메서드

  • GET - 리소스를 요청하고 정보를 조회하는 데 주로 사용
  • PUT - 서버에 데이터를 업로드하거나 업데이트 할 때 사용
  • POST - 서버에 데이터를 생성할 때 사용
  • DELETE - 서버의 데이터를 삭제할 때 사용

GET vs POST

GET

  • 쿼리 스트링을 사용하여 데이터를 전송
  • url 길이 제한이 있어 데이터 전송량이 제한될 수 있음
  • url 형식 : http://localhost:8000/login?id=admin&pw=1004

POST

  • body 문에 데이터를 포함시켜 전송
  • url 길이 제한이 없음(다양한 형식의 데이터 포함 가능)
  • url 형식 : http://localhost:8000/login

=> GET 방식의 경우 url 정보가 담기기 때문에 민감한 정보의 경우 POST 방식을 사용하는 것이 좋음

HTTPS

웹 브라우저와 웹 사이트 간에 데이터를 전송하는 데 사용되는 기본 프로토콜인 HTTP보안 버전

 

HTTPS 사용 프로토콜

Secure Socket Layer / SSL

- SSL 웹사이트와 브라우저 사이(또는 서버 사이) 전송되는 데이터를 암호화하여 인터넷 연결을 보호하기 위한 표준 기술

 

Transfer Layer Security / TLS

- SSL 향상된 더욱 안전한 버전

- 보안강화 목적으로 암호화,신원인증,데이터 위조변위 여부확인 목적으로 사용

 

즉, HTTPS는 HTTP 프로토콜 상위에서 TLS 암호화를 구현한 것

 

 

'Development > WEB' 카테고리의 다른 글

CSRF  (0) 2023.08.21
캐시,세션,쿠키  (0) 2023.08.11

+ Recent posts