|
8 | 8 | import asgiref
|
9 | 9 | import django
|
10 | 10 | import environ
|
| 11 | +from csp.constants import NONCE, NONE, SELF, STRICT_DYNAMIC, UNSAFE_INLINE |
11 | 12 | from django.contrib.messages import constants as messages
|
12 | 13 | from django.utils.translation import gettext_lazy as _
|
13 | 14 | from template_partials.apps import wrap_loaders
|
|
331 | 332 | # https://django-csp.readthedocs.io/en/latest/configuration.html
|
332 | 333 | # https://content-security-policy.com/
|
333 | 334 | # https://csp-evaluator.withgoogle.com/
|
334 |
| -CSP_DEFAULT_SRC = ("'self'",) |
335 |
| -CSP_SCRIPT_SRC = ("'strict-dynamic'", "'unsafe-inline'", "https:") |
336 |
| -CSP_SCRIPT_SRC_ATTR = None |
337 |
| -CSP_SCRIPT_SRC_ELEM = None |
338 |
| -CSP_IMG_SRC = ("'self'", "data:") |
339 |
| -CSP_OBJECT_SRC = ("'none'",) |
340 |
| -CSP_MEDIA_SRC = ("'self'",) |
341 |
| -CSP_FRAME_SRC = ("'none'",) |
342 |
| -CSP_FONT_SRC = ("'self'",) |
343 |
| -CSP_CONNECT_SRC = env.tuple("CSP_CONNECT_SRC", default=("'self'",)) |
344 |
| -CSP_STYLE_SRC = ("'strict-dynamic'", "'unsafe-inline'", "https:") |
345 |
| -CSP_STYLE_SRC_ATTR = None |
346 |
| -CSP_STYLE_SRC_ELEM = None |
347 |
| -CSP_BASE_URI = ("'none'",) |
348 |
| -CSP_FRAME_ANCESTORS = ("'none'",) |
349 |
| -CSP_FORM_ACTION = ("'self'",) |
350 |
| -CSP_MANIFEST_SRC = ("'self'",) |
351 |
| -CSP_WORKER_SRC = ("'self'",) |
352 |
| -CSP_PLUGIN_TYPES = None |
353 |
| -CSP_REQUIRE_SRI_FOR = None |
354 |
| -CSP_INCLUDE_NONCE_IN = ("script-src", "style-src") |
355 |
| -# Those are forced to true in production |
356 |
| -CSP_UPGRADE_INSECURE_REQUESTS = IS_PRODUCTION |
357 |
| -CSP_BLOCK_ALL_MIXED_CONTENT = IS_PRODUCTION |
| 335 | +CONTENT_SECURITY_POLICY = { |
| 336 | + "DIRECTIVES": { |
| 337 | + "default-src": (SELF,), |
| 338 | + "script-src": (STRICT_DYNAMIC, UNSAFE_INLINE, "https:", NONCE), |
| 339 | + "script-src-attr": None, |
| 340 | + "script-src-elem": None, |
| 341 | + "img-src": (SELF, "data:"), |
| 342 | + "object-src": (NONE,), |
| 343 | + "media-src": (SELF,), |
| 344 | + "frame-src": (NONE,), |
| 345 | + "font-src": (SELF,), |
| 346 | + "connect-src": env.tuple("CSP_CONNECT_SRC", default=(SELF,)), |
| 347 | + "style-src": (STRICT_DYNAMIC, UNSAFE_INLINE, "https:", NONCE), |
| 348 | + "style-src-attr": None, |
| 349 | + "style-src-elem": None, |
| 350 | + "base-uri": (NONE,), |
| 351 | + "child-src": (NONE,), |
| 352 | + "frame-ancestors": (NONE,), |
| 353 | + "form-action": (SELF,), |
| 354 | + "manifest-src": (SELF,), |
| 355 | + "worker-src": (SELF,), |
| 356 | + "require-sri-for": (NONE,), |
| 357 | + "upgrade-insecure-requests": IS_PRODUCTION, |
| 358 | + }, |
| 359 | +} |
358 | 360 |
|
359 | 361 |
|
360 | 362 | # CORS
|
|
0 commit comments