Pentest 49.1 LOW: Re-Auth jetzt auf JEDE portalUrl-Änderung
Bisher prüfte der Re-Auth-Trigger nur den Host – `https://1und1.de/foo` → `https://1und1.de/phishing/path` ging ohne currentPassword durch. Damit konnte ein gestohlener JWT Phishing-Pfade auf trusted Domains plazieren. Backend (provider.controller): normalizeUrlForCompare vergleicht jetzt die komplette URL (Trailing-Slash, Whitespace, Case), nicht nur den Host. hostOf-Helper entfernt. Frontend (ProviderModal): gleiche Normalisierung im UI, damit der Bestätigungs-Banner mit der Backend-Prüfung synchron läuft. Banner-Text leicht angepasst (nicht mehr "Domain wurde geändert" sondern generisch "Portal-URL wurde geändert"). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -299,15 +299,14 @@ function ProviderModal({
|
||||
currentPassword: '',
|
||||
});
|
||||
const originalPortalUrl = provider?.portalUrl ?? '';
|
||||
const hostOf = (u: string) => {
|
||||
try { return new URL(u.trim()).host.toLowerCase(); } catch { return ''; }
|
||||
};
|
||||
const portalUrlHostChanged =
|
||||
formData.portalUrl.trim() !== originalPortalUrl.trim()
|
||||
&& (hostOf(formData.portalUrl) || hostOf(originalPortalUrl))
|
||||
&& hostOf(formData.portalUrl) !== hostOf(originalPortalUrl);
|
||||
// Pentest 49.1: Jede URL-Änderung (inkl. Pfad/Query) braucht Re-Auth –
|
||||
// nicht nur Host-Wechsel. Normalisierung (Trailing-Slash, Whitespace,
|
||||
// Case) passend zum Backend, damit der Banner mit der Backend-Prüfung
|
||||
// übereinstimmt.
|
||||
const normalizeUrl = (u: string) => u.trim().replace(/\/+$/, '').toLowerCase();
|
||||
const portalUrlChanged = normalizeUrl(formData.portalUrl) !== normalizeUrl(originalPortalUrl);
|
||||
const portalUrlSetOnCreate = !provider && !!formData.portalUrl.trim();
|
||||
const needsReAuth = portalUrlHostChanged || portalUrlSetOnCreate;
|
||||
const needsReAuth = portalUrlChanged || portalUrlSetOnCreate;
|
||||
|
||||
useEffect(() => {
|
||||
if (isOpen) {
|
||||
@@ -400,8 +399,8 @@ function ProviderModal({
|
||||
<div className="p-3 bg-amber-50 border border-amber-200 rounded-lg space-y-2">
|
||||
<p className="text-sm text-amber-800">
|
||||
<strong>Bestätigung erforderlich:</strong>{' '}
|
||||
{portalUrlHostChanged
|
||||
? 'Die Portal-URL-Domain wurde geändert. Diese URL ist anschließend für alle Portal-Kunden dieses Anbieters klickbar.'
|
||||
{provider
|
||||
? 'Die Portal-URL wurde geändert. Diese URL ist anschließend für alle Portal-Kunden dieses Anbieters klickbar.'
|
||||
: 'Mit dem Speichern wird die Portal-URL für alle Portal-Kunden dieses Anbieters klickbar.'}
|
||||
{' '}Zur Sicherheit ist eine Bestätigung mit dem eigenen Passwort nötig.
|
||||
</p>
|
||||
|
||||
Reference in New Issue
Block a user