diff --git a/src/Plugin.php b/src/Plugin.php index aa6e778..42bfead 100644 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -79,6 +79,10 @@ public function init() }; } + if ($settings->sensitiveFields && is_array($settings->sensitiveFields)) { + $this->sentry->initDataScrubbing($settings->sensitiveFields, $options); + } + Sentry\init($options); /** diff --git a/src/models/Settings.php b/src/models/Settings.php index 044a5e4..88feb17 100644 --- a/src/models/Settings.php +++ b/src/models/Settings.php @@ -15,6 +15,7 @@ class Settings extends Model public $sampleRate = 1.0; // Client only option public $performanceMonitoring = true; // Client only option public $autoSessionTracking = false; // Client only option + public $sensitiveFields; // Fields containing sensitive data in request public function rules() { diff --git a/src/services/SentryService.php b/src/services/SentryService.php index f79a118..1e76afe 100644 --- a/src/services/SentryService.php +++ b/src/services/SentryService.php @@ -34,4 +34,22 @@ public function handleException($exception) Sentry\captureException($exception); } + + public function initDataScrubbing($sensitiveFields, &$options) + { + $options['before_send'] = function (Sentry\Event $event) use ($sensitiveFields) { + $replaceValue = '[Filtered]'; + $request = $event->getRequest(); + + if(isset($request['data'])) { + foreach ($sensitiveFields as $sensitiveField) { + if(is_string($sensitiveField) && isset($request['data'][$sensitiveField])) { + $request['data'][$sensitiveField] = $replaceValue; + } + } + } + $event->setRequest($request); + return $event; + }; + } } \ No newline at end of file