/**
* Security Test Suite for XSS Prevention
* Tests malicious payload detection and sanitization
*/
import {
sanitizeHtml,
sanitizeSvg,
sanitizeText,
sanitizeUrl,
validateImportedDrawing,
sanitizeDrawingData,
} from "./security";
console.log("๐งช Starting Security Test Suite...\n");
// Test 1: HTML/JS Sanitization
console.log("Test 1: HTML/JS Sanitization");
const maliciousHtml = `
Normal text content
`;
const sanitizedHtml = sanitizeHtml(maliciousHtml);
console.log("โ
Original:", maliciousHtml.substring(0, 100) + "...");
console.log("โ
Sanitized:", sanitizedHtml.substring(0, 100) + "...");
console.log("โ
Script tags removed:", !sanitizedHtml.includes("
`;
const sanitizedSvg = sanitizeSvg(maliciousSvg);
console.log("โ
Original:", maliciousSvg.substring(0, 100) + "...");
console.log("โ
Sanitized:", sanitizedSvg.substring(0, 100) + "...");
console.log("โ
SVG scripts removed:", !sanitizedSvg.includes("",
"vbscript:msgbox('XSS')",
"https://example.com",
"/relative/path",
"./current/path",
"../parent/path",
"mailto:test@example.com",
];
maliciousUrls.forEach((url) => {
const sanitized = sanitizeUrl(url);
const isSafe = sanitized !== "";
console.log(`โ
"${url}" -> "${sanitized}" (${isSafe ? "SAFE" : "BLOCKED"})`);
});
console.log("");
// Test 4: Text Sanitization with Length Limits
console.log("Test 4: Text Sanitization with Length Limits");
const longText = "A".repeat(2000);
const sanitizedLongText = sanitizeText(longText, 500);
console.log(
`โ
Long text truncated: ${longText.length} -> ${sanitizedLongText.length} chars`
);
const maliciousText = "Normal text";
const sanitizedText = sanitizeText(maliciousText);
console.log(`โ
Text sanitized: "${maliciousText}" -> "${sanitizedText}"`);
console.log(
"โ
Malicious content removed:",
!sanitizedText.includes("Malicious text",
},
{
id: "test2",
type: "rectangle",
x: 10,
y: 10,
width: 100,
height: 100,
angle: 0,
version: 1,
versionNonce: 1,
link: "javascript:alert('XSS')",
},
],
appState: {
viewBackgroundColor: "",
},
files: null,
preview: '',
};
console.log("Testing malicious drawing validation...");
const isValidDrawing = validateImportedDrawing(maliciousDrawing);
console.log(`โ
Malicious drawing rejected: ${!isValidDrawing}`);
try {
const sanitizedDrawing = sanitizeDrawingData(maliciousDrawing);
console.log("โ
Sanitization successful");
console.log(`โ
Text sanitized: ${sanitizedDrawing.elements[0].text}`);
console.log(
`โ
Link sanitized: ${sanitizedDrawing.elements[1].link || "null"}`
);
console.log(
`โ
SVG sanitized: ${!sanitizedDrawing.preview?.includes("