javascript / intermediate
Snippet
Validierung dynamischer Link-URLs zur Verhinderung von JavaScript-Pseudoprotokoll-Injektionen
Die ungeprüfte Übergabe dynamischer Benutzereingaben an ein `href`-Attribut ermöglicht Angreifern die Ausführung von `javascript:...`-Pseudoprotokollen. Durch die Validierung mit der nativen `URL`-API werden nur sichere Protokolle zugelassen, während `rel="noopener noreferrer"` vor Tabnabbing schützt.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import React from 'react';const ALLOWED_PROTOCOLS = ['https:', 'http:', 'mailto:'];export function SafeExternalLink({ href, children, ...rest }) {const isSafeProtocol = (targetUrl) => {try {const parsed = new URL(targetUrl, window.location.origin);return ALLOWED_PROTOCOLS.includes(parsed.protocol);}catch {return false;}};const safeHref = isSafeProtocol(href) ? href : '#';return (<ahref={safeHref}target="_blank"rel="noopener noreferrer"{...rest}>{children}</a>);}
react
Erklärung
1
const parsed = new URL(targetUrl, window.location.origin);
Parst den Eingabestring mit dem standardisierten URL-Konstruktor des Browsers zur Protokollprüfung.
2
return ALLOWED_PROTOCOLS.includes(parsed.protocol);
Prüft das Schema der URL gegen eine Whitelist, um unsichere Schemata wie javascript: abzuweisen.
3
rel="noopener noreferrer"
Verhindert den Zugriff der Zielseite auf window.opener und unterdrückt Referrer-Header.