Django의 보안은 다음 문서 페이지들을 참고하며 업데이트하는 것을 추천함
Django 보안 이슈 아카이브
Django
The web framework for perfectionists with deadlines.
docs.djangoproject.com
위키피디아 웹 응용 프로그램 보안 웹 페이지
Application security - Wikipedia
From Wikipedia, the free encyclopedia Measures taken to improve the security of an application Application security (short AppSec) includes all tasks that introduce a secure software development life cycle to development teams. Its final goal is to improve
en.wikipedia.org
Django의 내장된 보안 기능
XSS(Cross Site Scripting) 보호
- XSS 공격을 통해 사용자는 다른 사용자의 웹 브라우저에 클라이언트 측 스크립트를 주입할 수 있음
- Django 템플릿 사용을 통해 XSS 공격을 막을 수 있음(HTML에 위험한 문자를 이스케이프 처리함)
- 그러나 완전히 방어가 되는 것도 아님
- 다음과 같은 코드에서 var가 'class1 onmouseover=javascript:func()'로 설정되면 웹 브라우저가 불완전한 HTML을 렌더링하는 방식에 따라 승인되지 않은 자바스크립트 실행이 발생할 수 있음
<style class={{ var }}>...</style>
- autoescape가 꺼져있을 경우, 사용자 정의 템플릿 태그, 안전한 템플릿 태그, mark_safe로 is_safe를 사용하는 경우 주의
CSRF(Cross Site Request Forgery) 보호
- 악의 적인 사용자가 해당 사용자의 지식이나 동의 없이 다른 사용자의 자격 증명을 사용해 작업을 실행할 수 있음
- Django는 대부분의 CSRF 공격에 대한 보호 기능을 내장하고 있으나 어떤 완화 기법과 마찬가지로 한계가 있음
- View에서 CSRF 보호 방법
- CSRF 미들웨어는 기본적으로 활성화되어 있음, 이 설정을 무시할 경우 CSRF 공격이 처리되었다고 가정하는 뷰 미들웨어가 나오기 전에 'django.middleware.csrf.CsrfViewMiddleware'가 와야함
- 권장하지 않는 기능을 비활성한 경우, 보호하려는 특정 뷰에 대해 csrf_protext() 사용할 수 있음
- POST 양식을 사용하는 모든 서식 파일에서 양식이 내부 URL용인 경우 <form> 요소에서 csrf_token 태그를 사용
- 외부 URL을 대상으로 하는 POST 양식의 경우 CSRF 토큰이 유출되 취약점으로 이어질 수 있으므로 이를 수행해서는 안됨
- 'django.template.context_processors.csrf'을 사용하는 RequestContext를 사용함
- 일반 뷰 또는 앱을 사용하는 경우, 이 앱은 전체적으로 RequestContext를 사용함
- 프로세서를 수동으로 가져와 사용해 CSRF 토큰을 생성하고 템플릿 콘텍스트에 추가함
- 스스로 만든 render wrapper를 사용하기
<form action='.' method='post'>{% csrf_token %}
# 프로세서를 수동으로 가져와 사용해 CSRF 토큰을 생성하고 템플릿 콘텍스트에 추가 예제
from django.shortcuts import render
from django.template.context_processors import csrf
def my_view(request):
c = {}
c.update(csrf(request))
# 뷰 코드
return render(request,'a_template.html',c)
- AJAX request
Django
The web framework for perfectionists with deadlines.
docs.djangoproject.com
- 데커레이터 메서드
Django
The web framework for perfectionists with deadlines.
docs.djangoproject.com
SQL injection 보호
- 악의 적인 사용자가 데이터베이스에서 임의의 SQL 코드를 실행할 수 있는 공격 유형
- Django의 쿼리 세트를 사용하면 기본 데이터베이스 드라이버에 의해 결과 SQL은 적절하게 이스케이프됨
- 개발 시 원시 쿼리 입력에 관한 권한을 부여하기도 하기 때문에 이 부분을 주의해야함
- 사용자가 제어할 수 있는 모든 파라미터는 항상 올바르게 이스케이프 처리해야함
Clickjacking 보호
- 악의적인 웹 사이트가 프레임 내 다른 웹 사이트를 래핑하는 공격 유형
- 악의적인 웹 사이트가 숨겨진 프레임이나 iframe에 로드한 또 다른 웹 사이트의 숨겨진 요소를 사용자가 클릭하도록 유도할 때 발생
- Django는 X-Frame-Options 미들웨어의 형태로 클릭 재킹 보호 기능을 포함함
SSL/HTTPS
- 언제나 실용적인 것은 아니나 보안을 위해 HTTPS 뒤편에서 웹 사이트를 배포하는 것이 좋음
- 이 기능이 없다면 클라이언트와 서버 간의 전송 정보를 스니핑 당하거나 양방향으로 전송되는 데이터를 변경할 수 있음
보안 설계 시 읽어봐야하는 Django 보안 문서(Django 4.1)
Django
The web framework for perfectionists with deadlines.
docs.djangoproject.com
'Back-end & Server > Django' 카테고리의 다른 글
[Django] DB서버 연결 (0) | 2023.02.06 |
---|---|
[Django] 미들웨어(Middleware) (0) | 2023.02.06 |
[Django] 캐시 프레임워크 (0) | 2023.02.04 |
[Django] 비 HTML 콘텐츠와 세션 (0) | 2023.02.01 |
[Django] 배포 (0) | 2023.01.31 |