javascript / expert
Snippet
Testen dynamischer Inhalts-Bereinigung gegen XSS beim Svelte-Rendering
Wenn Komponenten benutzerdefiniertes HTML rendern, müssen Sicherheits-Unit-Tests überprüfen, dass schädliche Payloads wie Skript-Injektionen oder Inline-Event-Attribute gründlich bereinigt werden. Das Testen gerenderter DOM-Container stellt sicher, dass unsichere Elemente entfernt werden.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import { render } from '@testing-library/svelte';import { expect, test } from 'vitest';import SecureHTMLRenderer from './SecureHTMLRenderer.svelte';test('strips dangerous inline script tags before injecting dynamic markup', () => {const maliciousInput = '<img src="x" onerror="alert(1)" /><script>window.pwned=true</script>';const { container } = render(SecureHTMLRenderer, {props: { rawContent: maliciousInput }});const scriptTag = container.querySelector('script');const imgTag = container.querySelector('img');expect(scriptTag).toBeNull();expect(imgTag?.getAttribute('onerror')).toBeNull();expect(window.pwned).toBeUndefined();});
svelte
Erklärung
1
const maliciousInput = '<img src="x" onerror="alert(1)" /><script>window.pwned=true</script>';
Definiert eine XSS-Test-Payload zur Überprüfung von Element-Erstellung und Inline-Event-Ausführung.
2
const { container } = render(SecureHTMLRenderer, { props: { rawContent: maliciousInput } });
Rendert die Komponente in einen DOM-Container-Knoten, um die geparste HTML-Ausgabe zu prüfen.
3
expect(scriptTag).toBeNull();
Befestigt, dass Skript-Tags vor dem Einfügen ins DOM entfernt wurden.
4
expect(imgTag?.getAttribute('onerror')).toBeNull();
Prüft, dass Event-Handler-Attribute bereinigt wurden, um beliebige Codeausführung zu verhindern.