mirror of
https://github.com/i701/sarlink-portal-api.git
synced 2025-02-22 13:32:01 +00:00
Enhance Django settings security and configuration
- Add dynamic secret key generation with fallback - Improve caching configuration with environment-based settings - Update logging configuration with more granular log levels - Strengthen security headers and SSL/HTTPS settings - Add default values for security-related configurations
This commit is contained in:
parent
166a44bfc7
commit
2c3f550978
@ -15,6 +15,7 @@ from pathlib import Path
|
|||||||
import datetime
|
import datetime
|
||||||
from rest_framework.settings import api_settings
|
from rest_framework.settings import api_settings
|
||||||
from decouple import config
|
from decouple import config
|
||||||
|
from django.core.management.utils import get_random_secret_key
|
||||||
from django.utils.log import DEFAULT_LOGGING
|
from django.utils.log import DEFAULT_LOGGING
|
||||||
import logging.config
|
import logging.config
|
||||||
|
|
||||||
@ -26,13 +27,18 @@ BASE_DIR = Path(__file__).resolve().parent.parent
|
|||||||
# See https://docs.djangoproject.com/en/5.0/howto/deployment/checklist/
|
# See https://docs.djangoproject.com/en/5.0/howto/deployment/checklist/
|
||||||
|
|
||||||
# SECURITY WARNING: keep the secret key used in production secret!
|
# SECURITY WARNING: keep the secret key used in production secret!
|
||||||
SECRET_KEY = config("SECRET_KEY")
|
SECRET_KEY = config("SECRET_KEY", default=get_random_secret_key())
|
||||||
|
|
||||||
# SECURITY WARNING: don't run with debug turned on in production!
|
# SECURITY WARNING: don't run with debug turned on in production!
|
||||||
DEBUG = config("DEBUG", cast=bool)
|
DEBUG = config("DEBUG", cast=bool)
|
||||||
|
|
||||||
|
|
||||||
ALLOWED_HOSTS = str(config("ALLOWED_HOSTS", cast=str)).split(" ")
|
ALLOWED_HOSTS = []
|
||||||
|
|
||||||
|
# Add explicit hosts from environment
|
||||||
|
env_hosts = config("ALLOWED_HOSTS", default="").split()
|
||||||
|
ALLOWED_HOSTS.extend(env_hosts)
|
||||||
|
|
||||||
if DEBUG:
|
if DEBUG:
|
||||||
INTERNAL_IPS = [
|
INTERNAL_IPS = [
|
||||||
"127.0.0.1",
|
"127.0.0.1",
|
||||||
@ -143,16 +149,28 @@ else:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if not DEBUG:
|
# More robust caching configuration
|
||||||
CACHES = {
|
CACHES = {
|
||||||
"default": {
|
"default": {
|
||||||
"BACKEND": "django_redis.cache.RedisCache",
|
"BACKEND": (
|
||||||
"LOCATION": "redis://redis:6379/",
|
"django_redis.cache.RedisCache"
|
||||||
"OPTIONS": {
|
if not DEBUG
|
||||||
"CLIENT_CLASS": "django_redis.client.DefaultClient",
|
else "django.core.cache.backends.locmem.LocMemCache"
|
||||||
},
|
),
|
||||||
}
|
"LOCATION": (
|
||||||
|
config("REDIS_URL", default="redis://redis:6379/") if not DEBUG else ""
|
||||||
|
),
|
||||||
|
"OPTIONS": (
|
||||||
|
{
|
||||||
|
"CLIENT_CLASS": (
|
||||||
|
"django_redis.client.DefaultClient" if not DEBUG else None
|
||||||
|
),
|
||||||
|
}
|
||||||
|
if not DEBUG
|
||||||
|
else {}
|
||||||
|
),
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# Password validation
|
# Password validation
|
||||||
@ -271,7 +289,7 @@ STORAGES = {
|
|||||||
|
|
||||||
LOGGING_CONFIG = None
|
LOGGING_CONFIG = None
|
||||||
|
|
||||||
LOGLEVEL = os.environ.get("LOGLEVEL", "warning").upper()
|
LOGLEVEL = os.environ.get("LOGLEVEL", "WARNING").upper()
|
||||||
|
|
||||||
logging.config.dictConfig(
|
logging.config.dictConfig(
|
||||||
{
|
{
|
||||||
@ -313,6 +331,11 @@ logging.config.dictConfig(
|
|||||||
"propagate": False,
|
"propagate": False,
|
||||||
},
|
},
|
||||||
"django.server": DEFAULT_LOGGING["loggers"]["django.server"],
|
"django.server": DEFAULT_LOGGING["loggers"]["django.server"],
|
||||||
|
"django": {
|
||||||
|
"level": LOGLEVEL,
|
||||||
|
"handlers": ["console"],
|
||||||
|
"propagate": False,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@ -322,12 +345,16 @@ if not DEBUG:
|
|||||||
SECURE_SSL_REDIRECT = config("DJANGO_SECURE_SSL_REDIRECT", cast=bool)
|
SECURE_SSL_REDIRECT = config("DJANGO_SECURE_SSL_REDIRECT", cast=bool)
|
||||||
SESSION_COOKIE_SECURE = True
|
SESSION_COOKIE_SECURE = True
|
||||||
CSRF_COOKIE_SECURE = True
|
CSRF_COOKIE_SECURE = True
|
||||||
SECURE_HSTS_SECONDS = config("SECURE_HSTS_SECONDS", cast=int)
|
SECURE_HSTS_SECONDS = config("SECURE_HSTS_SECONDS", default=3600, cast=int)
|
||||||
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
|
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
|
||||||
SECURE_HSTS_PRELOAD = True
|
SECURE_HSTS_PRELOAD = True
|
||||||
CSRF_TRUSTED_ORIGINS = [config("CSRF_TRUSTED_ORIGINS")]
|
CSRF_TRUSTED_ORIGINS = [config("CSRF_TRUSTED_ORIGINS")]
|
||||||
CSRF_COOKIE_DOMAIN = config("CSRF_COOKIE_DOMAIN")
|
CSRF_COOKIE_DOMAIN = config("CSRF_COOKIE_DOMAIN")
|
||||||
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
|
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
|
||||||
|
# Additional security headers
|
||||||
|
SECURE_BROWSER_XSS_FILTER = True
|
||||||
|
X_FRAME_OPTIONS = "DENY"
|
||||||
|
SECURE_CONTENT_TYPE_NOSNIFF = True
|
||||||
|
|
||||||
|
|
||||||
EMAIL_BACKEND = (
|
EMAIL_BACKEND = (
|
||||||
|
Loading…
x
Reference in New Issue
Block a user