47 lines
1.7 KiB
JavaScript
47 lines
1.7 KiB
JavaScript
var sanitize = require('../lib/xss');
|
|
var sanitizeHTML = sanitize.sanitizeHTML;
|
|
var sanitizeText = sanitize.sanitizeText;
|
|
var decodeText = sanitize.decodeText;
|
|
var assert = require('assert');
|
|
var failed = 0;
|
|
|
|
function doTest(s, src, expected) {
|
|
try {
|
|
assert(s(src) === expected);
|
|
} catch (e) {
|
|
failed++;
|
|
console.log("Expected '" + expected + "'");
|
|
console.log("Got '" + s(src) + "'");
|
|
}
|
|
}
|
|
|
|
function testSanitizeHTML() {
|
|
doTest(sanitizeHTML, "< script src = bad.js>blah</script>", "[tag removed]blah[tag removed]");
|
|
|
|
doTest(sanitizeHTML, "< img src=asdf onerror='alert(\"xss\")'>", "<img src=\"asdf\">");
|
|
|
|
doTest(sanitizeHTML, "<a href='javascript:alert(document.cookie)'>", "<a href=\"[removed]:[removed]([removed])\">");
|
|
|
|
doTest(sanitizeHTML, "<a ", "<a>");
|
|
|
|
doTest(sanitizeHTML, "<img src=\"<a href=\"javascript:void(0)\">>", "<img src=\"<a href=\" javascriptvoid0>>");
|
|
}
|
|
|
|
function testSanitizeText() {
|
|
doTest(sanitizeText, "<a href=\"#\" onerror=\"javascript:alert('xss')\">", "<a href="#" onerror="javascript:alert('xss')">");
|
|
doTest(sanitizeText, "<>&"ç	", "&lt;&gt;&amp;&quot;&ccedil;&#x09");
|
|
}
|
|
|
|
function testDecode() {
|
|
doTest(decodeText, "<a href="#" onerror="javascript:alert('xss')">", "<a href=\"#\" onerror=\"javascript:alert('xss')\">");
|
|
doTest(decodeText, "&lt;&gt;&amp;&quot;&ccedil;&#x09", "<>&"ç	");
|
|
}
|
|
|
|
testSanitizeHTML();
|
|
testSanitizeText();
|
|
testDecode();
|
|
if (!failed)
|
|
console.log("Tests passed.");
|
|
else
|
|
console.log(""+failed, "tests failed");
|