티스토리 뷰
1. CSRF(Cross Site Request Forgery)
: 웹사이트 취약점 공격의 하나로, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)
를 특정 웹사이트에 요청하게 하는 공격
- 이미 사용자가 접속한 상황에서 요청값을 조작하여 사용자가 원하지 않는 action을 보내 웹 어플리케이션을 악용
- 사용자의 권한에 따라 위험성이 달라짐
2. 공격 과정 간단한 예시
-
공격자는 도구를 사용해 새글 등록 요청 발생시 어떤 파라미터가 전달되는지 확인한다.
(동작 구조 사전 파악)
-
공격자는 게시글에
<iframe>
태그를 이용해 보이지 않는 게시글을 남긴다.ex)
<iframe src="http//example.com/attack/reg_post?title=abc&content=abc" width="0" height="0" frameborder="0"></iframe>
-
피해자가 해당 웹사이트에 접속하여 공격자가 남긴 게시글에 들어간다.
-
들어가는 순간
<iframe>
태그로 만든 숨겨진 GET Request가 동작한다. -
피해자의 계정으로 새 글이 등록된다.
3. Django의 CSRF공격에 대한 방어
CSRF 공격을 방어하기 위한 다양한 방법이 있지만 Django에서는 기본적으로 csrf token을 이용한다.
POST 요청에 대해서만 csrf token을 발급하고 체크한다.
- CsrfViewMiddleware는 MIDDLEWARE 설정에서 기본적으로 활성화 되어있다.
- csrf token 발급(사용자가 로그인할 때마다 값이 변경됨)
- view가 호출되기 전 csrfmiddlewaretoken 유효성 검증
- POST 양식을 사용하는 템플릿에서
<form>
태그 안에 {% csrf_token %} 태그를 사용
<form class="mt-3" action="{% url 'accounts:signup' %}" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<div class="form-group">
<input type="text" class="form-control" id="name" name="name" placeholder="성명">
</div>
<button type="submit" class="btn btn-primary">제출하기</button>
</form>
동작 과정
- 사용자가 해당 페이지에 접속하면 Django에서 자동으로 csrf_token을 클라이언트로 보내어 cookie에 저장
- 사용자가 form을 모두 입력한 후 제출버튼을 클릭한다.
- form과 cookie의 csrf_token을 함께 POST로 전송한다.
- 전송된 token의 유효성을 검증
- 유효한 요청이면 요청을 처리
- token이 유효하지 않거나(없거나 값이 잘못된 경우) 검증 오류 시에는 403 Forbidden Response 반환
참고 자료
'Django' 카테고리의 다른 글
[Django Basic 11] User 모델 확장 (0) | 2020.02.17 |
---|---|
[Django basic 10] Django Autentication (0) | 2020.02.15 |
[Django Basic 08] URL Reverse (0) | 2020.02.09 |
[Django Basic 07] settings.py에서 SECRET_KEY 분리하기 (0) | 2020.02.07 |
[Django Basic 06] HttpResponse VS HttpResponseRedirect / render VS redirect (0) | 2020.01.30 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Django
- MySQL
- Django 어플리케이션
- Django 프로젝트 생성
- Django 회원 정보 수정
- query parameter
- Django 로그인
- Redis Cache
- python
- Django 댓글
- Django 인스타그램
- Django 비밀번호 수정
- 장고
- Django Instagram
- Django 검색
- Django 컬렉션
- Django 해시태그
- Django 팔로우
- Django 로그아웃
- java
- Django User
- Django application
- Django 좋아요
- 파이썬
- Redis
- Django 북마크
- 북마크 어플리케이션
- 서점 어플리케이션
- Django 업로드
- Django 회원가입
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함