Skip to content

Commit c7cc77b

Browse files
committed
🔧[#42] add HSTS & CSP settings
1 parent a965065 commit c7cc77b

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

open_api_framework/conf/base.py

+30
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import sentry_sdk
1010
from corsheaders.defaults import default_headers as default_cors_headers
11+
from csp.constants import SELF
1112
from log_outgoing_requests.formatters import HttpFormatter
1213
from notifications_api_common.settings import * # noqa
1314

@@ -124,6 +125,7 @@
124125
# External applications.
125126
"axes",
126127
"django_filters",
128+
"csp",
127129
"corsheaders",
128130
"vng_api_common",
129131
"notifications_api_common",
@@ -162,6 +164,7 @@
162164
"django.contrib.messages.middleware.MessageMiddleware",
163165
"django.middleware.clickjacking.XFrameOptionsMiddleware",
164166
"axes.middleware.AxesMiddleware",
167+
"csp.contrib.rate_limiting.RateLimitedCSPMiddleware",
165168
]
166169

167170
ROOT_URLCONF = f"{PROJECT_DIRNAME}.urls"
@@ -421,6 +424,9 @@
421424
CSRF_COOKIE_SECURE = IS_HTTPS
422425
CSRF_COOKIE_SAMESITE = config("CSRF_COOKIE_SAMESITE", "Strict")
423426

427+
if IS_HTTPS:
428+
SECURE_HSTS_SECONDS = 31536000
429+
424430
X_FRAME_OPTIONS = "DENY"
425431

426432
#
@@ -672,3 +678,27 @@ def init_sentry(before_send: Callable | None = None):
672678
LOG_OUTGOING_REQUESTS_MAX_AGE = config(
673679
"LOG_OUTGOING_REQUESTS_MAX_AGE", default=7
674680
) # number of days
681+
682+
683+
#
684+
# Django CSP settings
685+
#
686+
687+
CSP_DEFAULT_SRC = [
688+
SELF,
689+
] + config("CSP_EXTRA_DEFAULT_SRC", default=[], split=True)
690+
691+
692+
CONTENT_SECURITY_POLICY = {
693+
"EXCLUDE_URL_PREFIXES": ["/api/", "/admin"],
694+
"DIRECTIVES": {
695+
"base-uri": SELF,
696+
"default-src": CSP_DEFAULT_SRC,
697+
"style-src": CSP_DEFAULT_SRC,
698+
"script-src": CSP_DEFAULT_SRC,
699+
"img-src": CSP_DEFAULT_SRC,
700+
"frame-ancestors": None,
701+
"frame-src": [SELF],
702+
"upgrade-insecure-requests": False,
703+
},
704+
}

pyproject.toml

+1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ dependencies = [
3939
"djangorestframework-gis>=1.0",
4040
"django-filter>=24.2",
4141
"drf-spectacular>=0.27.2",
42+
"django-csp>=3.8",
4243
"djangorestframework-inclusions>=1.2.0",
4344
"commonground-api-common>=1.12.1",
4445
"mozilla-django-oidc-db>=0.19.0",

0 commit comments

Comments
 (0)