security: Breadcrumbs ohne Daten an GlitchTip, Übergangsmarke der Session-Sperre entfernt

- ErrorReportScrubber entfernt die Daten aller Breadcrumbs und bereinigt ihre
  Nachrichten; Livewire-Breadcrumbs standardmäßig aus — das SDK hängt dort
  Formularwerte und Properties an (Roadmap 4.9). Bestand in GlitchTip geprüft:
  keine Formular- oder Passwortdaten.
- SessionRevocation::legacyCachedMark() entfernt (Übergang bis v1.6.0)

Changelog: Sicherheit

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-10-09 13:35:54 +00:00
parent 29e68330ca
commit d1b9ffdcf1
6 changed files with 49 additions and 18 deletions

View file

@ -6,6 +6,7 @@ use Illuminate\Contracts\Debug\ExceptionHandler;
use Illuminate\Support\Facades\Route;
use Livewire\Features\SupportFileUploads\MissingFileUploadsTraitException;
use Livewire\Features\SupportLockedProperties\CannotUpdateLockedPropertyException;
use Sentry\Breadcrumb;
use Sentry\Event;
use Sentry\ExceptionDataBag;
use Sentry\SentrySdk;
@ -110,6 +111,28 @@ test('messages and exception values lose e-mail addresses', function () {
->and($scrubbed?->getUser())->toBeNull();
});
test('breadcrumbs lose their data, so form values never reach glitchtip', function () {
$event = Event::createEvent();
$event->setBreadcrumb([
new Breadcrumb(Breadcrumb::LEVEL_INFO, Breadcrumb::TYPE_DEFAULT, 'livewire', 'Component booted: customer.security', [
'updates' => ['password' => 'Geheim-12345!', 'email' => 'kunde@example.com'],
]),
new Breadcrumb(Breadcrumb::LEVEL_INFO, Breadcrumb::TYPE_DEFAULT, 'db.sql.query', 'select * from users where email = info@firma.de', ['executionTimeMs' => 1.2]),
]);
$breadcrumbs = ErrorReportScrubber::beforeSend($event)?->getBreadcrumbs() ?? [];
expect($breadcrumbs)->toHaveCount(2)
->and($breadcrumbs[0]->getMetadata())->toBe([])
->and($breadcrumbs[0]->getMessage())->toBe('Component booted: customer.security')
->and($breadcrumbs[1]->getMetadata())->toBe([])
->and($breadcrumbs[1]->getMessage())->toBe('select * from users where email = [email]');
});
test('livewire breadcrumbs are switched off by default', function () {
expect(config('sentry.breadcrumbs.livewire'))->toBeFalse();
});
test('the test suite never reports to the real glitchtip', function () {
// Ohne diese Absicherung landeten absichtlich provozierte Fehler
// („Queue weg“, „Datenbank nicht erreichbar“) als Issues in GlitchTip.