115 lines
2.9 KiB
JavaScript
115 lines
2.9 KiB
JavaScript
|
export default [
|
||
|
[
|
||
|
'protocol-based JS injection: simple, no spaces',
|
||
|
{
|
||
|
input: `<a href="javascript:alert('XSS');">foo</a>`,
|
||
|
output: '<a>foo</a>',
|
||
|
},
|
||
|
],
|
||
|
[
|
||
|
'protocol-based JS injection: simple, spaces before',
|
||
|
{
|
||
|
input: `<a href="javascript :alert('XSS');">foo</a>`,
|
||
|
output: '<a>foo</a>',
|
||
|
},
|
||
|
],
|
||
|
[
|
||
|
'protocol-based JS injection: simple, spaces after',
|
||
|
{
|
||
|
input: `<a href="javascript: alert('XSS');">foo</a>`,
|
||
|
output: '<a>foo</a>',
|
||
|
},
|
||
|
],
|
||
|
[
|
||
|
'protocol-based JS injection: simple, spaces before and after',
|
||
|
{
|
||
|
input: `<a href="javascript : alert('XSS');">foo</a>`,
|
||
|
output: '<a>foo</a>',
|
||
|
},
|
||
|
],
|
||
|
[
|
||
|
'protocol-based JS injection: preceding colon',
|
||
|
{
|
||
|
input: `<a href=":javascript:alert('XSS');">foo</a>`,
|
||
|
output: '<a>foo</a>',
|
||
|
},
|
||
|
],
|
||
|
[
|
||
|
'protocol-based JS injection: UTF-8 encoding',
|
||
|
{
|
||
|
input: '<a href="javascript:">foo</a>',
|
||
|
output: '<a>foo</a>',
|
||
|
},
|
||
|
],
|
||
|
[
|
||
|
'protocol-based JS injection: long UTF-8 encoding',
|
||
|
{
|
||
|
input: '<a href="javascript:">foo</a>',
|
||
|
output: '<a>foo</a>',
|
||
|
},
|
||
|
],
|
||
|
[
|
||
|
'protocol-based JS injection: long UTF-8 encoding without semicolons',
|
||
|
{
|
||
|
input:
|
||
|
'<a href=javascript:alert('XSS')>foo</a>',
|
||
|
output: '<a>foo</a>',
|
||
|
},
|
||
|
],
|
||
|
[
|
||
|
'protocol-based JS injection: hex encoding',
|
||
|
{
|
||
|
input: '<a href="javascript:">foo</a>',
|
||
|
output: '<a>foo</a>',
|
||
|
},
|
||
|
],
|
||
|
[
|
||
|
'protocol-based JS injection: long hex encoding',
|
||
|
{
|
||
|
input: '<a href="javascript:">foo</a>',
|
||
|
output: '<a>foo</a>',
|
||
|
},
|
||
|
],
|
||
|
[
|
||
|
'protocol-based JS injection: hex encoding without semicolons',
|
||
|
{
|
||
|
input:
|
||
|
'<a href=javascript:alert('XSS')>foo</a>',
|
||
|
output: '<a>foo</a>',
|
||
|
},
|
||
|
],
|
||
|
[
|
||
|
'protocol-based JS injection: null char',
|
||
|
{
|
||
|
input: '<a href=java\u0000script:alert("XSS")>foo</a>',
|
||
|
output: '<a>foo</a>',
|
||
|
},
|
||
|
],
|
||
|
[
|
||
|
'protocol-based JS injection: invalid URL char',
|
||
|
{ input: '<img src=javascript:alert("XSS")>', output: '<img>' },
|
||
|
],
|
||
|
[
|
||
|
'protocol-based JS injection: Unicode',
|
||
|
{
|
||
|
input: `<a href="\u0001java\u0003script:alert('XSS')">foo</a>`,
|
||
|
output: '<a>foo</a>',
|
||
|
},
|
||
|
],
|
||
|
[
|
||
|
'protocol-based JS injection: spaces and entities',
|
||
|
{
|
||
|
input: `<a href="  javascript:alert('XSS');">foo</a>`,
|
||
|
output: '<a>foo</a>',
|
||
|
},
|
||
|
],
|
||
|
[
|
||
|
'img on error',
|
||
|
{
|
||
|
input: '<img src="x" onerror="alert(document.domain)" />',
|
||
|
output: '<img src="x">',
|
||
|
},
|
||
|
],
|
||
|
['style tags are removed', { input: '<style>.foo {}</style> Foo', output: 'Foo' }],
|
||
|
];
|