Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions docs/apidocs.rst
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,6 @@ API Docs
.. autoclass:: sentry_sdk.attachments.Attachment
:members:

.. autoclass:: sentry_sdk.scrubber.EventScrubber
:members:

.. autoclass:: sentry_sdk.monitor.Monitor
:members:

Expand Down
21 changes: 0 additions & 21 deletions sentry_sdk/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
from sentry_sdk.integrations.dedupe import DedupeIntegration
from sentry_sdk.monitor import Monitor
from sentry_sdk.profiler.continuous_profiler import setup_continuous_profiler
from sentry_sdk.scrubber import EventScrubber
from sentry_sdk.serializer import serialize
from sentry_sdk.sessions import SessionFlusher
from sentry_sdk.traces import Span, trace
Expand All @@ -49,7 +48,6 @@
get_sdk_name,
get_type_name,
handle_in_app,
has_data_collection_enabled,
logger,
)

Expand Down Expand Up @@ -132,20 +130,6 @@ def _get_options(*args: "Optional[str]", **kwargs: "Any") -> "Dict[str, Any]":

rv["data_collection"] = _resolve_data_collection(rv)

# Do not add the event scrubber if data collection is enabled as it can remove data that's
# collected under data collection config
if not has_data_collection_enabled(rv) and rv["event_scrubber"] is None:
rv["event_scrubber"] = EventScrubber(
send_default_pii=False
if rv["send_default_pii"] is None
else rv["send_default_pii"]
)
elif has_data_collection_enabled(rv) and rv["event_scrubber"]:
logger.warning(
"Event scrubbers are not enabled when data collection configuration is provided. Ignoring event_scrubber...",
)
rv["event_scrubber"] = None

if rv["socket_options"] and not isinstance(rv["socket_options"], list):
logger.warning(
"Ignoring socket_options because of unexpected format. See urllib3.HTTPConnection.socket_options for the expected format."
Expand Down Expand Up @@ -571,11 +555,6 @@ def _prepare_event(
self.options["project_root"],
)

if event is not None:
event_scrubber = self.options["event_scrubber"]
if event_scrubber:
event_scrubber.scrub_event(event)

if previous_total_breadcrumbs is not None:
event["breadcrumbs"] = AnnotatedValue(
event.get("breadcrumbs", {"values": []}),
Expand Down
8 changes: 0 additions & 8 deletions sentry_sdk/consts.py
Original file line number Diff line number Diff line change
Expand Up @@ -1296,7 +1296,6 @@ def __init__(
MATCH_ALL
],
functions_to_trace: "Sequence[Dict[str, str]]" = [], # noqa: B006
event_scrubber: "Optional[sentry_sdk.scrubber.EventScrubber]" = None,
max_value_length: "Optional[int]" = DEFAULT_MAX_VALUE_LENGTH,
enable_backpressure_handling: bool = True,
error_sampler: "Optional[Callable[[Event, Hint], Union[float, bool]]]" = None,
Expand Down Expand Up @@ -1429,13 +1428,6 @@ def __init__(

See https://docs.sentry.io/platforms/python/configuration/options/#data_collection for more details.

:param event_scrubber: Scrubs the event payload for sensitive information such as cookies, sessions, and
passwords from a `denylist`.

It can additionally be used to scrub from another `pii_denylist` if `send_default_pii` is disabled.

See how to `configure the scrubber here <https://docs.sentry.io/data-management/sensitive-data/#event-scrubber>`_.

:param include_source_context: When enabled, source context will be included in events sent to Sentry.

This source context includes the five lines of code above and below the line of code where an error
Expand Down
178 changes: 0 additions & 178 deletions sentry_sdk/scrubber.py

This file was deleted.

6 changes: 4 additions & 2 deletions tests/integrations/fastapi/test_fastapi.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,8 @@ async def test_formdata_request_body(sentry_init, capture_items):
(event,) = (item.payload for item in items if item.type == "event")
assert event["request"]["data"].keys() == PARSED_FORM.keys()
assert event["request"]["data"]["username"] == PARSED_FORM["username"]
assert event["request"]["data"]["password"] == "[Filtered]"
# Expectation in data collection is that the user scrubs this within `before_send`
assert event["request"]["data"]["password"] == "hello123"
assert event["request"]["data"]["photo"] == ""

sentry_sdk.flush()
Expand Down Expand Up @@ -506,7 +507,8 @@ async def _error(request: Request):
)

event = events[0]
assert event["request"]["data"] == {"password": "[Filtered]"}
# Expectation in data collection is that the user scrubs this within `before_send`
assert event["request"]["data"] == {"password": "secret"}
assert event["request"]["headers"]["authorization"] == "[Filtered]"
assert event["request"]["headers"]["proxy-authorization"] == "[Filtered]"

Expand Down
12 changes: 9 additions & 3 deletions tests/integrations/flask/test_flask.py
Original file line number Diff line number Diff line change
Expand Up @@ -944,13 +944,17 @@ def index():
assert response.data == b"hi"


def test_request_not_modified_by_reference(sentry_init, capture_events, app):
def test_request_not_modified_by_reference(
sentry_init, capture_events, app, monkeypatch
):
sentry_init(
integrations=[
flask_sentry.FlaskIntegration(),
LoggingIntegration(event_level=logging.ERROR),
]
],
data_collection={},
)
monkeypatch.setattr(flask_sentry, "flask_login", None)

@app.route("/", methods=["POST"])
def index():
Expand All @@ -974,7 +978,9 @@ def index():

(event,) = events

assert event["request"]["data"]["password"] == "[Filtered]"
# In data collection, request bodies need to be handled in the before_send
# callback, so it's expected that the event will contain the raw value.
assert event["request"]["data"]["password"] == "ohno"
assert event["request"]["headers"]["Authorization"] == "[Filtered]"
assert event["request"]["headers"]["Proxy-Authorization"] == "[Filtered]"

Expand Down
3 changes: 2 additions & 1 deletion tests/integrations/starlette/test_starlette.py
Original file line number Diff line number Diff line change
Expand Up @@ -1417,7 +1417,8 @@ async def _error(request):
)

event = events[0]
assert event["request"]["data"] == {"password": "[Filtered]"}
# Expectation in data collection is that the user scrubs this within `before_send`
assert event["request"]["data"] == {"password": "ohno"}
assert event["request"]["headers"]["authorization"] == "[Filtered]"
assert event["request"]["headers"]["proxy-authorization"] == "[Filtered]"

Expand Down
5 changes: 1 addition & 4 deletions tests/integrations/tornado/test_tornado.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,10 +76,7 @@ def get(self):

# Sent by every data-collection cookie test below. Mixes benign cookies
# (``theme``, ``lang``) with ones whose names match the data-collection
# sensitive denylist (``jwt``, ``identity``). Those two names are deliberately
# NOT in the ``EventScrubber`` denylist (which matches keys exactly), so any
# filtering we observe on them comes from the extractor's data-collection
# logic, not the always-on scrubber.
# sensitive denylist (``jwt``, ``identity``).
COOKIE_HEADER = "jwt=tokenval; theme=dark; lang=en; identity=alice"


Expand Down
Loading
Loading