|
32 | 32 |
|
33 | 33 | SECRET_KEY = env.str("SECRET_KEY") |
34 | 34 |
|
| 35 | +# Validate SECRET_KEY for security |
| 36 | +if not SECRET_KEY: |
| 37 | + raise exceptions.ImproperlyConfigured( |
| 38 | + "SECRET_KEY environment variable must be set. " |
| 39 | + "Generate one with: python -c 'import secrets; print(secrets.token_urlsafe(50))'" |
| 40 | + ) |
| 41 | +if len(SECRET_KEY) < 50: |
| 42 | + raise exceptions.ImproperlyConfigured( |
| 43 | + "SECRET_KEY must be at least 50 characters long for security. " |
| 44 | + "Current length: {}".format(len(SECRET_KEY)) |
| 45 | + ) |
| 46 | + |
35 | 47 | ALLOWED_HOSTS = env.list("ALLOWED_HOSTS", default=[".localhost", "127.0.0.1", "[::1]"]) |
36 | 48 |
|
37 | 49 | VULNERABLECODE_PASSWORD_MIN_LENGTH = env.int("VULNERABLECODE_PASSWORD_MIN_LENGTH", default=14) |
|
42 | 54 |
|
43 | 55 | ALTCHA_HMAC_KEY = env.str("ALTCHA_HMAC_KEY") |
44 | 56 |
|
| 57 | +# Validate ALTCHA_HMAC_KEY for security |
| 58 | +if not ALTCHA_HMAC_KEY: |
| 59 | + raise exceptions.ImproperlyConfigured( |
| 60 | + "ALTCHA_HMAC_KEY environment variable must be set. " |
| 61 | + "Generate one with: head -c 32 /dev/urandom | xxd -p -c 32" |
| 62 | + ) |
| 63 | +if len(ALTCHA_HMAC_KEY) != 64: |
| 64 | + raise exceptions.ImproperlyConfigured( |
| 65 | + "ALTCHA_HMAC_KEY must be a 32-byte hexadecimal key (64 characters). " |
| 66 | + "Current length: {}".format(len(ALTCHA_HMAC_KEY)) |
| 67 | + ) |
| 68 | + |
45 | 69 | # SECURITY WARNING: do not run with debug turned on in production |
46 | 70 | DEBUG = env.bool("VULNERABLECODE_DEBUG", default=False) |
47 | 71 |
|
|
51 | 75 | # SECURITY WARNING: do not run with debug turned on in production |
52 | 76 | DEBUG_UI = env.bool("VULNERABLECODE_DEBUG_UI", default=False) |
53 | 77 |
|
54 | | -# WARNING: Set this to False in production |
55 | | -STAGING = env.bool("STAGING", default=True) |
| 78 | +# CRITICAL: STAGING must be explicitly set to True in non-production environments |
| 79 | +# Default is False for security - production deployments are secure by default |
| 80 | +STAGING = env.bool("STAGING", default=False) |
56 | 81 |
|
57 | 82 | EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend" |
58 | 83 | EMAIL_HOST = env.str("EMAIL_HOST", default="") |
|
119 | 144 | "HOST": env.str("VULNERABLECODE_DB_HOST", "localhost"), |
120 | 145 | "NAME": env.str("VULNERABLECODE_DB_NAME", "vulnerablecode"), |
121 | 146 | "USER": env.str("VULNERABLECODE_DB_USER", "vulnerablecode"), |
122 | | - "PASSWORD": env.str("VULNERABLECODE_DB_PASSWORD", "vulnerablecode"), |
| 147 | + "PASSWORD": env.str("VULNERABLECODE_DB_PASSWORD"), |
123 | 148 | "PORT": env.str("VULNERABLECODE_DB_PORT", "5432"), |
124 | 149 | "ATOMIC_REQUESTS": True, |
125 | 150 | } |
|
0 commit comments