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
fd8dd74d5f
commit
bae8347f6c
66 changed files with 4035 additions and 144 deletions
36
app/Services/Auth/SecurityNotifier.php
Normal file
36
app/Services/Auth/SecurityNotifier.php
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
<?php
|
||||
|
||||
namespace App\Services\Auth;
|
||||
|
||||
use App\Enums\SecurityChange;
|
||||
use App\Mail\SecurityChangeNotice;
|
||||
use App\Models\User;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
|
||||
/**
|
||||
* Informiert den Kontoinhaber über sicherheitsrelevante Änderungen
|
||||
* (Sicherheitsaudit 07.10.2026, S-06). Wer eine fremde Session nutzt, soll
|
||||
* nicht unbemerkt Passwort, Login-Adresse oder zweiten Faktor ändern können.
|
||||
*/
|
||||
class SecurityNotifier
|
||||
{
|
||||
/**
|
||||
* @param string|null $recipient Abweichender Empfänger, z. B. die
|
||||
* bisherige Adresse nach einem E-Mail-Wechsel.
|
||||
*/
|
||||
public function notify(User $user, SecurityChange $change, ?string $recipient = null, ?string $newEmail = null): void
|
||||
{
|
||||
$recipient = trim((string) ($recipient ?? $user->email));
|
||||
|
||||
if ($recipient === '') {
|
||||
return;
|
||||
}
|
||||
|
||||
Mail::to($recipient)->queue((new SecurityChangeNotice(
|
||||
user: $user,
|
||||
change: $change,
|
||||
occurredAt: now()->format('d.m.Y H:i'),
|
||||
newEmail: $newEmail,
|
||||
))->afterCommit());
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue