Add escapeHtml utility and apply to all user-controllable SweetAlert2 html
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
29
tests/unit/utils/escapeHtml.test.js
Normal file
29
tests/unit/utils/escapeHtml.test.js
Normal file
@@ -0,0 +1,29 @@
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { escapeHtml } from '@/utils/escapeHtml.js';
|
||||
|
||||
describe('escapeHtml', () => {
|
||||
it('escapes ampersand', () => {
|
||||
expect(escapeHtml('a&b')).toBe('a&b');
|
||||
});
|
||||
|
||||
it('escapes angle brackets', () => {
|
||||
expect(escapeHtml('<script>')).toBe('<script>');
|
||||
});
|
||||
|
||||
it('escapes double quotes', () => {
|
||||
expect(escapeHtml('"hello"')).toBe('"hello"');
|
||||
});
|
||||
|
||||
it('escapes single quotes', () => {
|
||||
expect(escapeHtml("it's")).toBe("it's");
|
||||
});
|
||||
|
||||
it('escapes all special characters together', () => {
|
||||
expect(escapeHtml('<img src="x" onerror="alert(\'XSS\')">'))
|
||||
.toBe('<img src="x" onerror="alert('XSS')">');
|
||||
});
|
||||
|
||||
it('returns plain text unchanged', () => {
|
||||
expect(escapeHtml('hello world')).toBe('hello world');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user