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 (<ahref={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.