[보안] Django 보안 설정을 해보자

이상해씨·2023년 10월 4일
0

장고 (Django)

목록 보기
20/38
post-custom-banner

웹어플리케이션의 주요 보안 기능

1) XSS (Cross-Site Scripting)

  • XSS 공격 : 악의적인 스크립트를 웹 페이지에 삽입하여 사용자의 브라우저에서 실행되도록 만드는 공격
  • 주요 보안 기능 : 입력값을 이스케이프하고, 콘텐츠 보안 정책 (CSP)을 구현하여 외부 스크립트의 실행을 제한.

2) CSRF (Cross-Site Request Forgery)

  • CSRF 공격 : 사용자가 의도하지 않은 동작을 수행하도록 조작된 요청을 전송하게 만드는 공격
  • 주요 보안 기능 : 요청에 대한 랜덤한 토큰을 생성하여 요청과 함께 전송하고, 서버에서 토큰을 검증하여 외부에서의 요청을 거부.

3) SQL Injection

  • SQL Injection : 악의적인 사용자가 웹 애플리케이션에 SQL 쿼리를 주입하여 데이터베이스에 대한 비법적인 접근을 시도하는 공격
  • 주요 보안 기능: 입력값을 적절하게 이스케이프하거나 파라미터화된 쿼리 (prepared statement)를 사용하여 SQL Injection을 방지

4) 클릭재킹 (Clickjacking)

  • 클릭재킹 : 웹 애플리케이션을 조작하여 사용자가 의도하지 않은 동작을 수행하게 만드는 공격
  • 주요 보안 기능: X-Frame-Options 헤더를 사용하여 iframe의 사용을 제한하거나, Content Security Policy (CSP)를 설정

Django 보안 설정

1) SECRET_KEY 설정

  • 시크릿키를 설정하고 커밋하지 않기
  • settings.py
SECRET_KEY = 'your_secret_key_here'

2) DEBUG 비활성화

  • 배포를 하기 위해서는 DEBUG를 비활성화(False)
  • setting.py에서 설정
  • prod, local로 분리한 경우 prod, local 파일에서 설정
DEBUG = False

3) ALLOWED_HOSTS 설정

  • application에 접근할 수 있는 호스트 제한
  • setting.py에서 설정
  • prod, local로 분리한 경우 prod, local 파일에서 설정
ALLOWED_HOSTS = ['your_domain.com', 'your_server_ip']

4) django.middleware.security.SecurityMiddleware 활성화

  • Django의 SecurityMiddleware를 사용하여 여러 보안 헤더를 자동으로 추가하고, 보안 취약성을 줄임.
MIDDLEWARE = [
    # ...
    'django.middleware.security.SecurityMiddleware',
    # ...
]

5) CSRF 보호
Django는 기본적으로 CSRF(Cross-Site Request Forgery) 공격을 방지하기 위한 보호를 제공
{% csrf_token %} 템플릿 태그를 사용하고, AJAX 요청에 대한 CSRF 토큰을 설정

📌 CSRF (Cross-Site Request Forgery) 공격
: 악의적인 웹 사이트나 이메일을 통해 사용자가 의도하지 않게 웹 애플리케이션에서 특정 작업을 수행하도록 유도하는 공격

📌 AJAX (Asynchronous JavaScript and XML) 요청
: 비동기적으로 서버와 통신하여 웹페이지를 업데이트하거나 데이터를 가져오는 기술
웹 페이지 새로고침 없이도 사용자와 상호작용하여 동적으로 데이터를 로드한다. js를 통해 처리되며, 네트워크 요청을 보내고 서버로부터의 응답을 처리하는 역할

6) 적절한 인증 및 권한 설정
사용자 인증 및 권한 관리에 대한 Django의 내장 기능을 활용.
django.contrib.auth 앱을 사용하여 사용자 인증 및 권한을 설정.
settings.py의 installed_apps에 사용

INSTALLED_APPS = [
	...
    'django.contrib.auth',
	...

]

7) 중요 데이터 보호
데이터베이스 암호화하여 데이터를 보호. Django에서는 django-encrypted-fields와 같은 서드파티 라이브러리를 사용하여 필드 수준의 암호화를 구현.

8) 외부 입력 검증
사용자 입력 및 데이터베이스 쿼리와 같은 외부 입력을 검증하고 처리할 때 Django의 내장 폼 및 ORM을 사용하여 쿼리 주입 및 다른 보안 취약성을 방지하세요.

📌 ORM (Object-Relational Mapping)
: 객체 지향 프로그래밍과 관계형 데이터베이스 간의 데이터 변환 및 상호 작용을 관리하는 프로그래밍 패턴 또는 기술

9) 안전한 쿠키 이용

  • 쿠키 (Cookie) : 웹 브라우저와 웹 서버 간에 정보를 주고받을 수 있는 작은 데이터 조각
SESSION_COOKIE_SECURE = True CSRF_COOKIE_SECURE = True
  • SESSION_COOKIE_SECURE = True
    - 세션쿠키는 HTTPS 연결을 통해서만 전송됨

    • 세션 쿠키(Session Cookie)는 웹 브라우저가 실행되고 있는 동안에만 유효한 쿠키
      - 암호화된 연결시에면 세션 쿠키전송(HTTPS), HTTP에서는 쿠키가 전송되지 않음.
  • CSRF_COOKIE_SECURE = True
    - CSRF 토큰 쿠키에 대한 설정

    • True로 설정하면 CSRF 토큰 쿠키는 HTTPS 연결을 통해서만 전송
    • CSRF를 방지하기 위함

참고

profile
공부에는 끝이 없다
post-custom-banner

0개의 댓글