feat: harden phase 3 api security

This commit is contained in:
QiuSW
2026-07-03 10:34:37 +08:00
parent 1c5aa7845d
commit 0168aa30ba
19 changed files with 540 additions and 46 deletions
+28
View File
@@ -11,6 +11,7 @@ https://docs.djangoproject.com/en/5.2/ref/settings/
"""
import os
from decimal import Decimal
from pathlib import Path
# Build paths inside the project like this: BASE_DIR / 'subdir'.
@@ -50,6 +51,13 @@ def env_int(name: str, default: int) -> int:
return int(value)
def env_decimal(name: str, default: str) -> Decimal:
value = os.environ.get(name)
if not value:
value = default
return Decimal(value)
load_dotenv(BASE_DIR / ".env")
# SECURITY WARNING: keep the secret key used in production secret.
@@ -82,6 +90,14 @@ ALIPAY_DEBUG = env_bool("ALIPAY_DEBUG", False)
ALLOWED_HOSTS = env_list("DJANGO_ALLOWED_HOSTS", "127.0.0.1,localhost,testserver")
API_GENERATE_THROTTLE_RATE = os.environ.get("API_GENERATE_THROTTLE_RATE", "60/min")
API_AUTH_FAILURE_THROTTLE_RATE = os.environ.get("API_AUTH_FAILURE_THROTTLE_RATE", "30/min")
IMAGE_URL_MAX_BYTES = env_int("IMAGE_URL_MAX_BYTES", 10 * 1024 * 1024)
IMAGE_URL_MAX_REDIRECTS = env_int("IMAGE_URL_MAX_REDIRECTS", 3)
IMAGE_URL_CONNECT_TIMEOUT_SECONDS = env_int("IMAGE_URL_CONNECT_TIMEOUT_SECONDS", 10)
IMAGE_URL_READ_TIMEOUT_SECONDS = env_int("IMAGE_URL_READ_TIMEOUT_SECONDS", 60)
RECHARGE_MAX_AMOUNT_CNY = env_decimal("RECHARGE_MAX_AMOUNT_CNY", "100000.00")
# Application definition
@@ -100,6 +116,18 @@ INSTALLED_APPS = [
'apps.api',
]
REST_FRAMEWORK = {
"DEFAULT_AUTHENTICATION_CLASSES": [],
"DEFAULT_PERMISSION_CLASSES": [
"rest_framework.permissions.IsAuthenticated",
],
"DEFAULT_THROTTLE_RATES": {
"generate": API_GENERATE_THROTTLE_RATE,
"api_auth_failure": API_AUTH_FAILURE_THROTTLE_RATE,
},
"EXCEPTION_HANDLER": "apps.api.exceptions.api_exception_handler",
}
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',