반응형
장고의 CSRF 방지
크로스 사이트 요청 위조(CSRF, Cross-Site Request Forgery)는 웹 사이트에서
유저가 서버로 요청을 보내는 행위를 악의적으로 변경 및 조작한 후 요청을 전송하는 것입니다.
즉 사용자가 요청하지 않은 것도 사용자가 요청한 것처럼 처리되는 것입니다.
CSRF 위조의 단계
- 사용자가 보안이 취약한 사이트에 로그인 후 아이디와 패스워드 등 입력을 서버로 전송시킨다. [ Form 사용 ]
- 서버가 사용자가 전송한 정보를 보고 정상 유저임을 인증 [ 로그인 성공 ] 이때, 서버로 부터 인증된 사용자라는 정보가 사용자에게도 전달된다.
- 이 상태에서 사용자가 로그아웃을 하지 않은 채, 악성 사이트로 이동하게 됩니다.
- 악성 사이트에서 사용자의 정보를 가져오거나, 돈을 송금하는 등의 요청을 전송하는 폼을 누르게 하거나, 해당 폼을 굳이 작성하지 않아도 자동으로 전송되는 형태로 요청을 시도합니다.
- 요청을 보낼 때, 사용자가 가지고 있는 인증 정보 또한 함께 서버로 전송됩니다.
- 취약한 사이트에서는 인증된 사용자가 보낸 요청이므로 요청을 그대로 수행하게 됩니다. [ 돈 송금 요청 등]
CSRF 방지 토큰
이러한 CSRF를 방지하는 방법으로 많이 사용하는 방법이 CSRF 위조 방지 토큰 (Cross Site Request Forgery Token)입니다.
요청 위조 방지 토큰은 서버로부터 폼을 요청할 때 발행되며, 사용자가 폼에 데이터를 입력하고 서버로 전송할 때 이 토큰 값을 함께 전달하여 서버에서 토큰 값을 비교한 뒤 요청을 처리하는 방식입니다.
그래서 다른 이름으로는 요청 검증 토큰 ( Request Verification Token )이라고 부르기도 합니다.
CSRF 위조 방지 토큰을 사용하게 된다면 악성 사이트가 폼을 전송할 때 위조 방지 토큰 값을 같이 전송하지 않기 때문에 서버에서는 사용자가 직접 보낸 요청인지 아닌지를 알 수 있게 되므로 CSRF를 검증할 수 있게 됩니다.
Django의 CSRF 방지
Django는 CSRF 위조 방지를 위한 기본 기능을 제공해줍니다.
위에서 말한 위조 방지 토큰 (Cross Site Request Forgery Token)을 삽입하고 검증하는 과정을 아주 간단하게 구현할 수 있습니다.
사용 방법은 Form을 사용하는 템플릿에 아래 코드와 같이 {% csrf_token %} 템플릿 태그를 넣어주면 됩니다.
<form method="post">{% csrf_token %}
내부코드
</form>
반응형
'Study > Django' 카테고리의 다른 글
Django Validator / 장고 유효성 검증 / validator 추가하기 (0) | 2021.12.10 |
---|---|
Django Validator / 장고 유효성 검증 / 내장 Field 옵션 (0) | 2021.12.10 |
Django traling slash / 장고 트레일링 슬래시 (0) | 2021.12.09 |
Django Model Form / 장고 모델 폼 / forms.ModelForm (0) | 2021.12.08 |
Django model DateTimeField 한국 시간으로 설정하기 (0) | 2021.12.07 |