0 Tage Serie
javascript / intermediate
Snippet

Bereinigung dynamischer Href-Werte gegen Javascript-Schema-Injektionen

Die direkte Übergabe von benutzergesteuerten Eingaben in das href-Attribut eines Anchor-Tags kann über URI-Schemata wie 'javascript:' zu Cross-Site-Scripting (XSS) führen. Das Validieren und Bereinigen der URL-Zeichenkette verhindert die Ausführung von Skripten vor dem Rendern des Elements.

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
import React from 'react';
const RESTRICTED_SCHEMES = ['javascript:', 'data:', 'vbscript:'];
function sanitizeDestination(rawUrl) {
if (!rawUrl || typeof rawUrl !== 'string') return '#';
const normalized = rawUrl.trim().toLowerCase();
const isRestricted = RESTRICTED_SCHEMES.some((scheme) => normalized.startsWith(scheme));
return isRestricted ? '#' : rawUrl.trim();
}
export function SecureExternalLink({ targetUrl, linkText }) {
const safeUrl = sanitizeDestination(targetUrl);
const isNavigable = safeUrl !== '#';
return (
<a
href={safeUrl}
target={isNavigable ? '_blank' : undefined}
rel={isNavigable ? 'noopener noreferrer' : undefined}
>
{linkText}
</a>
);
}
react
Erklärung
1
const isRestricted = RESTRICTED_SCHEMES.some((scheme) => normalized.startsWith(scheme));
Prüft, ob die normalisierte URL mit gefährlichen Schemata wie javascript: oder data: beginnt.
2
return isRestricted ? '#' : rawUrl.trim();
Greift auf ein harmloses Raute-Zeichen zurück, wenn ein unsicheres Schema erkannt wird.
3
rel={isNavigable ? 'noopener noreferrer' : undefined}
Sichert externe Links gegen Reverse-Tabnabbing und window.opener-Angriffe ab.