URLs enthalten mehr Struktur als sie scheinen
Ein Ziel umfasst ein Schema, einen Host, einen optionalen Port, einen Pfad, eine Abfrage und ein Fragment. Die Behandlung als beliebige Zeichenfolge macht die Validierung inkonsistent und kann zu unsicherem oder überraschendem Verhalten führen.
Analysieren Sie den vollständigen Wert einmal mit einem getesteten URL-Parser und wenden Sie dann Regeln auf das strukturierte Ergebnis an.
Fragmente gehören nicht in die Serveranfrage
Ein Browser behält das Fragment nach dem Hash-Zeichen und sendet es nicht an den Zielserver. Ein Umleitungsdienst kann es für die Client-Navigation beibehalten, aber eine Plattform kann Fragmente absichtlich entfernen, wenn ihr Vertrag sie als lokalen UI-Status behandelt.
Welche Richtlinie auch immer gewählt wird, sollte sichtbar und getestet sein. Die stille Codierung des Hashs in einen Pfad ändert das Ziel und ist ein häufiger Normalisierungsfehler.
Private Reiseziele bedürfen besonderer Sorgfalt
Loopback-, private, verbindungslokale und interne Hosts können gefährlich werden, wenn eine Plattform auch Vorschauen abruft oder Gesundheitsprüfungen durchführt. Wenn Sie sie vor der Speicherung ablehnen, wird die Sicherheitsgrenze vereinfacht.
Die Auflösung von Hostnamen erfordert zusätzliche Prüfungen in einem isolierten Fetcher, da ein öffentlich aussehender Hostname später in eine private Adresse aufgelöst werden kann. Die String-Validierung allein ist kein vollständiger SSRF-Schutz.