security: закрыть уязвимости аудита

- Secure-куки (SESSION/CSRF_COOKIE_SECURE), HSTS, nosniff, Referrer-Policy, X-Frame-Options
- SECURE_PROXY_SSL_HEADER для корректной работы за HTTPS-прокси
- антиспам: не более 3 заявок с одного IP за 10 минут (кэш)
- удалён мусорный main.py (заглушка PyCharm)
- .env.example: DJANGO_DEBUG=0, ALLOWED_HOSTS под прод, COOKIE_SECURE/HSTS включены
This commit is contained in:
2026-08-06 16:14:09 +04:00
parent a01a0da25b
commit 22102dbb7a
4 changed files with 69 additions and 20 deletions
+27
View File
@@ -50,10 +50,37 @@ MIDDLEWARE = [
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]
# --- HTTPS / безопасность кук (сайт работает только через HTTPS-прокси) ---
# nginx должен передавать заголовок X-Forwarded-Proto: https
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
SESSION_COOKIE_SECURE = os.environ.get("DJANGO_COOKIE_SECURE", "1") == "1"
CSRF_COOKIE_SECURE = os.environ.get("DJANGO_COOKIE_SECURE", "1") == "1"
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_SAMESITE = "Lax"
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_REFERRER_POLICY = "strict-origin-when-cross-origin"
X_FRAME_OPTIONS = "DENY"
SECURE_HSTS_SECONDS = int(os.environ.get("DJANGO_HSTS_SECONDS", "31536000"))
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True
# Редирект на HTTPS не включаем — его делает nginx (иначе цикл при неправильном X-Forwarded-Proto)
# SECURE_SSL_REDIRECT = True
# --- django-axes: защита от брутфорса логина ---
AXES_FAILURE_LIMIT = 5
AXES_COOLOFF_TIME = 1 # часы
AXES_RESET_ON_SUCCESS = True
AXES_LOCKOUT_PARAMETERS = ["ip_address"]
# --- антиспам: лимит заявок с одного IP ---
# Кэш in-memory (locmem) подходит для одного воркера; для нескольких воркеров
# нужно memcached/redis, иначе лимит считается на каждый процесс отдельно.
CACHES = {
"default": {
"BACKEND": "django.core.cache.backends.locmem.LocMemCache",
"LOCATION": "teacher-site-cache",
}
}
ROOT_URLCONF = "config.urls"