Skip to content

Commit 6909b8d

Browse files
authored
Merge pull request #5547 from mozilla/update-exception-report-filter-mpp-4189
fix MPP-4189: change debug report filter to allow-list
2 parents b43c06a + dbccff9 commit 6909b8d

File tree

2 files changed

+34
-29
lines changed

2 files changed

+34
-29
lines changed

privaterelay/debug.py

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,36 +5,30 @@
55

66
class RelaySaferExceptionReporterFilter(SafeExceptionReporterFilter):
77
"""
8-
Add more settings values that should be hidden in debug and exception reports.
9-
10-
This is also used by the Django Debug Toolbar settings panel.
8+
Hide all settings EXCEPT ones explicitly allowed by SAFE_PREFIXES or SAFE_NAMES.
119
"""
1210

13-
# Hide any variable value that starts with these prefixes
14-
UNSAFE_PREFIXES = ["AWS_", "IQ_", "TWILIO_", "REDIS_"]
11+
# Allow variable values that start with these prefixes
12+
SAFE_PREFIXES: list = []
1513

16-
# Hide any variable value named in this list
17-
UNSAFE_NAMES = [
18-
# Settings
19-
"ALLOWED_ACCOUNTS",
20-
"ALLOWED_HOSTS",
21-
"DJANGO_ALLOWED_HOSTS",
22-
"INTERNAL_IPS",
23-
# Environment Variables / META
24-
"CSRF_COOKIE",
25-
"DATABASE_URL",
26-
"DJANGO_ALLOWED_HOST",
27-
"DJANGO_ALLOWED_SUBNET",
28-
"DJANGO_INTERNAL_IPS",
29-
"GOOGLE_APPLICATION_CREDENTIALS",
30-
"GOOGLE_CLOUD_PROFILER_CREDENTIALS_B64",
31-
"SENTRY_DSN",
14+
# Allow variable values named in this list
15+
SAFE_NAMES = [
16+
"BUNDLE_PLAN_ID_US",
17+
"BUNDLE_PROD_ID",
18+
"RELAY_CHANNEL",
19+
"RELAY_CHANNEL_NAME",
20+
"RELAY_FROM_ADDRESS",
21+
"SUBPLAT3_BUNDLE_PRODUCT_KEY",
22+
"SUBPLAT3_PHONES_PRODUCT_KEY",
23+
"SUBPLAT3_PREMIUM_PRODUCT_KEY",
3224
]
3325

26+
# Match everything EXCEPT safe names and safe prefixes
3427
hidden_settings = re.compile(
35-
"API|TOKEN|KEY|SECRET|PASS|SIGNATURE|HTTP_COOKIE|"
36-
+ "|".join(f"^{prefix}" for prefix in UNSAFE_PREFIXES)
28+
r"^(?!("
29+
+ "|".join(f"{re.escape(name)}" for name in SAFE_NAMES)
3730
+ "|"
38-
+ "|".join(f"^{name}$" for name in UNSAFE_NAMES),
31+
+ "|".join(f"{re.escape(prefix)}.*" for prefix in SAFE_PREFIXES)
32+
+ r")$).+",
3933
re.IGNORECASE,
4034
)

privaterelay/tests/debug_tests.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,13 @@ def test_default_filter() -> None:
1717
@pytest.mark.parametrize(
1818
"name",
1919
(
20-
"ACCOUNT_ADAPTER",
21-
"LOGGING_CONFIG",
20+
"BUNDLE_PLAN_ID_US",
21+
"BUNDLE_PROD_ID",
22+
"RELAY_CHANNEL",
23+
"RELAY_FROM_ADDRESS",
24+
"SUBPLAT3_BUNDLE_PRODUCT_KEY",
25+
"SUBPLAT3_PHONES_PRODUCT_KEY",
26+
"SUBPLAT3_PREMIUM_PRODUCT_KEY",
2227
),
2328
)
2429
def test_safe_settings(name: str) -> None:
@@ -31,6 +36,7 @@ def test_safe_settings(name: str) -> None:
3136
@pytest.mark.parametrize(
3237
"name",
3338
(
39+
"ACCOUNT_ADAPTER",
3440
"ALLOWED_ACCOUNTS",
3541
"ALLOWED_HOSTS",
3642
"AUTH_PASSWORD_VALIDATORS",
@@ -43,6 +49,7 @@ def test_safe_settings(name: str) -> None:
4349
"AWS_SQS_EMAIL_DLQ_URL",
4450
"AWS_SQS_EMAIL_QUEUE_URL",
4551
"AWS_SQS_QUEUE_URL",
52+
"CACHES",
4653
"DJANGO_ALLOWED_HOSTS",
4754
"IQ_ENABLED",
4855
"IQ_FOR_NEW_NUMBERS",
@@ -53,6 +60,7 @@ def test_safe_settings(name: str) -> None:
5360
"IQ_MESSAGE_PATH",
5461
"IQ_OUTBOUND_API_KEY",
5562
"IQ_PUBLISH_MESSAGE_URL",
63+
"LOGGING_CONFIG",
5664
"PASSWORD_HASHERS",
5765
"PASSWORD_RESET_TIMEOUT",
5866
"SECRET_KEY",
@@ -80,6 +88,9 @@ def test_unsafe_settings(name: str) -> None:
8088
def meta_request(rf: RequestFactory) -> HttpRequest:
8189
request = rf.get(
8290
path="/meta-test",
91+
BUNDLE_PLAN_ID_US="price_1LwoSDJNcmPzuWtR6wPJZeoh",
92+
BUNDLE_PROD_ID="bundle-relay-vpn-dev",
93+
CACHES={"default": {"LOCATION": "rediss://user:[email protected]:10001"}},
8394
CSRF_COOKIE="cross-site-request-forgery-cookie",
8495
DATABASE_URL="postgres://user:[email protected]:5432/relay_db",
8596
DJANGO_ALLOWED_HOST="relay.example.com",
@@ -95,9 +106,8 @@ def meta_request(rf: RequestFactory) -> HttpRequest:
95106
@pytest.mark.parametrize(
96107
"name",
97108
(
98-
"REMOTE_ADDR",
99-
"SCRIPT_NAME",
100-
"wsgi.version",
109+
"BUNDLE_PLAN_ID_US",
110+
"BUNDLE_PROD_ID",
101111
),
102112
)
103113
def test_safe_meta(name: str, meta_request: HttpRequest) -> None:
@@ -109,6 +119,7 @@ def test_safe_meta(name: str, meta_request: HttpRequest) -> None:
109119
@pytest.mark.parametrize(
110120
"name",
111121
(
122+
"CACHES",
112123
"CSRF_COOKIE",
113124
"DATABASE_URL",
114125
"DJANGO_ALLOWED_HOST",

0 commit comments

Comments
 (0)