Hallo Jörg,
irgendwo
Nena, 1984... - seit „Dark“ mein Horror-Song 😉
Ich bin 56. Glaubst Du etwa, ich wäre im Stande, mich an eine Irgendwo-Erwähnung auch nur ansatzweise zu erinnern?
Einmal in einem Adressfooter, der sowohl die Webadresse als auch die Email als auch ein Image des Users beinhalten kann. Aber einmal auch als Freitext, ähnlich eines Foreneintrages.
D.h. das sind Eingabefelder?
(1) Der er User kann seinen „Adress-Footer“ eintragen, so wie eine Signatur, und darin ist HTML möglich? Dann musst Du aber zwischen <img src="..."> und <a href="..."> unterscheiden, denn du möchtest Links ja dereferieren.
(2) Und es gibt ein Freitextfeld, wo man URLs eintragen kann. Und die möchtest Du automatisch zum Link machen. Aber eben nur die URLs, die nicht in einem img Tag stehen. D.h. in deinem Freitext ist HTML erlaubt und dieses HTML wird auch als HTML wieder zum Brauser geschickt? Brrr - Red Alert - ich hoffe, dieses HTML bekommt nur der User zu sehen, der es selbst eingegeben hat, denn andernfalls solltest Du dieses Feature schnellstens entfernen. User-HTML ist per Definition nicht vertrauenswürdig. Du könntest natürlich nur bestimmte HTML Elemente zulassen. Ich traue Dir angesichts des Gesprächsverlaufs aber nicht zu, das korrekt umzusetzen.
Wenn User auf einer Seite URLs hinterlassen können, die beim Abruf der Seite automatisch wirksam werden, ist Schabernack in jeder beliebigen Menge möglich. Wenn die User auch noch beliebiges HTML hinterlassen können, ist deine Seite lebensgefährlich. Ich sag nur: <script>.
Wenn Du in deinen User-Eingaben die Zeichen <, > und & findest, dann musst Du sie durch <, > und & ersetzen. Kein User-HTML, niemals. Wenn der User ein Bild in seinen Footer einbauen will, erschaffe eine eigene Syntax. Das tut unser Forum auch. Zum Beispiel: @http://example.org/foo/bar/bild2.jpg
. Die Bild-URL musst Du prüfen, ob sie auf jpg, jpeg, gif, png oder svg endet. Das ist zwar bei manchen Bildquellen blöd, verhindert aber URLs für vermeintliche Bilder wie http://example.org/admin/user/843749?delete - was bei einem richtig schlecht gebauten Forum eben mal einen User töten könnte.
Für Bilder und Links kannst Du dann dein Verfahren anwenden, sie aus dem Text herauszusuchen und ein img oder a Element daraus zu machen. Diesem a Element gibst Du das rel Attribut: rel="nofollow noopener noreferrer". Dann brauchst Du auch kein dereferer-Script mehr. Das rel-Attribut erledigt das.
Ein preg-replace könnte das sogar hinbekommen. Aber dann mit Callback, und im Callback nimmst Du die nötigen Prüfungen vor.
Rolf
sumpsi - posui - obstruxi