security: Sicherheitsaudit 07.10.2026 (S-01–S-06) behoben, Passkeys und Zweitfaktor-Pflicht für Admins
Audit: dev/sicherheit/SICHERHEITSAUDIT-2026-10-07.md, Plan und Entscheidungen: dev/sicherheit/ENTWICKLUNGSPLAN-SICHERHEIT-2026-10-07.md. - S-01 Legacy-Rechnungen fremder Kunden nur mit billing:manage (auch Kundenroute). - S-02 Kontaktzuordnung auf der Firmenanzeige verlangt companies:write, $id gesperrt. - S-03 CompanyMembershipObserver: automatische Firmenrechte werden bei jeder Adress-/Zuordnungsänderung sofort neu bewertet; memberships:resync-auto. - S-04 Passwortwechsel beendet alle anderen Sessions (PasswordChanger), Reset alle Sessions und offene Login-Links; Fortify PUT /user/password abgeschaltet. API-Tokens bleiben bestehen. - S-05 Google: email_verified Pflicht, feste Bindung über die Provider-ID; Erstverknüpfung bestehender Konten außerhalb gmail/hd nur per Bestätigungslink in derselben Browser-Session. - S-06 Frischer Identitätsnachweis (Passwort, App-Code, E-Mail-Code oder Passkey) vor E-Mail-Wechsel, erster 2FA-Einrichtung und Token-Erzeugung; Hinweis-Mails an die (bisherige) Kontoadresse. - Entscheidung 5: Passkeys (Fortify, @laravel/passkeys) für alle; Super-Admins und Admins bestätigen die Session für den Admin-Bereich per Passkey oder App-Code (EnsureStrongAdminAuthentication, Notfallschalter AUTH_REQUIRE_STRONG_ADMIN); Reset des zweiten Faktors durch Super-Admins. Neue Migration: create_passkeys_table. Suite 2.403 grün (1 übersprungen), Larastan ohne Meldung. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
d1d2ab3de7
commit
1c07fcb84b
66 changed files with 4035 additions and 144 deletions
|
|
@ -6,6 +6,7 @@ use App\Contracts\NewsletterSyncClient;
|
|||
use App\Exceptions\MailDeliveryPausedException;
|
||||
use App\Helpers\ThemeHelper;
|
||||
use App\Http\Middleware\BlockAdminDuringImpersonation;
|
||||
use App\Http\Middleware\EnsureStrongAdminAuthentication;
|
||||
use App\Http\Middleware\EnsureUserIsAdmin;
|
||||
use App\Http\Middleware\EnsureUserIsCustomer;
|
||||
use App\Http\Middleware\LogSlowAdminRequests;
|
||||
|
|
@ -31,6 +32,7 @@ use App\Models\User;
|
|||
use App\Models\WithdrawalRequest;
|
||||
use App\Observers\ActivityLogObserver;
|
||||
use App\Observers\AdminPerformanceCacheObserver;
|
||||
use App\Observers\CompanyMembershipObserver;
|
||||
use App\Observers\CompanyPublicCacheObserver;
|
||||
use App\Observers\EmailDomainObserver;
|
||||
use App\Observers\ImageRightsConfirmationObserver;
|
||||
|
|
@ -243,6 +245,12 @@ class AppServiceProvider extends ServiceProvider
|
|||
Company::observe(EmailDomainObserver::class);
|
||||
Contact::observe(EmailDomainObserver::class);
|
||||
|
||||
// Automatische Firmenrechte sofort neu bewerten, wenn sich ihre
|
||||
// E-Mail-Grundlage ändert (Sicherheitsaudit 07.10.2026, S-03).
|
||||
Company::observe(CompanyMembershipObserver::class);
|
||||
Contact::observe(CompanyMembershipObserver::class);
|
||||
User::observe(CompanyMembershipObserver::class);
|
||||
|
||||
// Öffentliche Seiten-Caches bei Löschung/Deaktivierung einer Firma
|
||||
// verwerfen — auf jedem Löschweg, nicht nur im Admin-Formular (F13).
|
||||
Company::observe(CompanyPublicCacheObserver::class);
|
||||
|
|
@ -266,6 +274,7 @@ class AppServiceProvider extends ServiceProvider
|
|||
Livewire::addPersistentMiddleware([
|
||||
BlockAdminDuringImpersonation::class,
|
||||
EnsureUserIsAdmin::class,
|
||||
EnsureStrongAdminAuthentication::class,
|
||||
EnsureUserIsCustomer::class,
|
||||
LogSlowAdminRequests::class,
|
||||
]);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue