Default `EventScrubber` uses `recursive=False`, so nested denylist keys are not scrubbed |
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 65/100
Piste de recherche
The issue is in sentry_sdk/scrubber.py where EventScrubber.init sets recursive=False by default. Review sentry_sdk/client.py to see how the scrubber is instantiated. Write a test that creates an event with a nested denylist key (like under 'extra') and verify it's not scrubbed with the default, then is scrubbed after setting recursive=True. Check if there are performance concerns with deep recursion and consider limiting to known containers.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Static review of public source at commit 85e7ce66fcca. No traffic was sent to any Sentry environment.
EventScrubber only walks nested dict/list values when recursive=True, and that flag defaults to False:
sentry_sdk/scrubber.py:
class EventScrubber:
def __init__(
self,
denylist: "Optional[List[str]]" = None,
recursive: bool = False,
...
) -> None:
if isinstance(k, str) and k.lower() in self.denylist:
d[k] = AnnotatedValue.substituted_because_contains_sensitive_data()
elif self.recursive:
self.scrub_dict(v)
self.scrub_list(v)
The default client wires a scrubber without enabling recursion:
sentry_sdk/client.py:
rv["event_scrubber"] = EventScrubber(
send_default_pii=False
if rv["send_default_pii"] is None
else rv["send_default_pii"]
)
Top-level keys such as authorization are scrubbed; the same key nested under extra, request.data, or breadcrumb data is not. Integrators who assume “Sentry scrubs secrets by default” get shallow coverage only.
Suggested change:
- Default
recursive=TrueonEventScrubber, or passrecursive=Truefrom the client bootstrap. - If recursion cost is the concern, recurse only into known containers (
extra,request.data, breadcrumbdata, framevars) rather than the whole event. - Document the flag next to
send_default_piiin the scrubbing guide.
Severity: low–medium data-protection hardening (secret leakage via nested event fields). No proof-of-concept; no events were submitted.
Happy to send a focused PR + regression test with a nested denylist key if useful.
- Langage dominant
- Python
- Étoiles
- 2.2k
- Forks
- 672
- Merge moyen
- 22 h 47 min
- PR mergées (30 j)
- 224
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de getsentry/sentry-python
-
Python
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
getsentry/sentry-python#7569 · 1 commentaire ·
-
Python
Difficulté 1/5 Moins d'une heure Accessibilité débutants 85/100
getsentry/sentry-python#7568 · 2 commentaires ·
-
Python
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
getsentry/sentry-python#7567 · 1 commentaire ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
getsentry/sentry-python#7543 · 2 commentaires · 1 personne assignée ·
-
Python
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
getsentry/sentry-python#6992 · 1 commentaire ·
Toutes les issues de getsentry/sentry-python
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
anthropics/skills#1811 · 1 commentaire ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
speaches-ai/speaches#678 ·
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
datalayer/mcp-compose#42 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
conda-forge/spacy-feedstock#177 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
UKGovernmentBEIS/inspect_evals#2523 ·