본문 바로가기

Back-end & Server/Django

[Django] 보안

728x90
반응형

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 보호 방법
    1. CSRF 미들웨어는 기본적으로 활성화되어 있음, 이 설정을 무시할 경우 CSRF 공격이 처리되었다고 가정하는 뷰 미들웨어가 나오기 전에 'django.middleware.csrf.CsrfViewMiddleware'가 와야함
    2. 권장하지 않는 기능을 비활성한 경우, 보호하려는 특정 뷰에 대해 csrf_protext() 사용할 수 있음
    3. POST 양식을 사용하는 모든 서식 파일에서 양식이 내부 URL용인 경우 <form> 요소에서 csrf_token 태그를 사용
    4. 외부 URL을 대상으로 하는 POST 양식의 경우 CSRF 토큰이 유출되 취약점으로 이어질 수 있으므로 이를 수행해서는 안됨
    5. 'django.template.context_processors.csrf'을 사용하는 RequestContext를 사용함
    6. 일반 뷰 또는 앱을 사용하는 경우, 이 앱은 전체적으로 RequestContext를 사용함
    7. 프로세서를 수동으로 가져와 사용해 CSRF 토큰을 생성하고 템플릿 콘텍스트에 추가함
    8. 스스로 만든 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

 

728x90
반응형

'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