BEGIN { $^W = 1 }
my
@tests
;
my
$p
=
HTML::StripScripts::Parser->new( {
AllowHref
=> 1,
AllowRelURL
=> 1,
AllowMailto
=> 1,
strict_names
=> 1,
strict_comments
=> 1,
}
);
isa_ok(
$p
,
"HTML::StripScripts::Parser"
);
my
$i
= 0;
while
(
@tests
) {
$i
++;
my
$in
=
shift
@tests
;
my
$out
=
shift
@tests
;
my
$result
=
$p
->filter_html(
$in
);
is(
$result
,
$out
,
"xss $i"
);
}
BEGIN {
@tests
= (
q{';alert(String.fromCharCode(88,83,83))//\';alert(String.fromCharCode(88,83,83))//";alert(String.fromCharCode(88,83,83))//\";alert(String.fromCharCode(88,83,83))//--></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>=&\{\}
},
q{';alert(String.fromCharCode(88,83,83))//\';alert(String.fromCharCode(88,83,83))//";alert(String.fromCharCode(88,83,83))//\";alert(String.fromCharCode(88,83,83))//--><!--filtered-->">'><!--filtered--><!--filtered-->=&{}
},
q{'';!--"<XSS>=&\{()\}
},
q{'';!--"<!--filtered-->=&{()}
},
q{<SCRIPT>alert('XSS')</SCRIPT>}
,
q{<!--filtered--><!--filtered-->}
,
q{<!--filtered--><!--filtered-->}
,
q{<SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>}
,
q{<!--filtered--><!--filtered-->}
,
q{<BASE HREF="javascript:alert('XSS');//">}
,
q{<!--filtered-->}
,
q{<BGSOUND SRC="javascript:alert('XSS');">}
,
q{<!--filtered-->}
,
q{<BODY BACKGROUND="javascript:alert('XSS');">}
,
q{<!--filtered-->}
,
q{<BODY ONLOAD=alert('XSS')>}
,
q{<!--filtered-->}
,
q{<DIV STYLE="background-image: url(javascript:alert('XSS'))">}
,
q{<div style=""></div>}
,
q{<DIV STYLE="background-image: url(javascript:alert('XSS'))">}
,
q{<div style=""></div>}
,
q{<DIV STYLE="width: expression(alert('XSS'));">}
,
q{<div style=""></div>}
,
q{<FRAMESET><FRAME SRC="javascript:alert('XSS');"></FRAMESET>}
,
q{<!--filtered--><!--filtered--><!--filtered-->}
,
q{<IFRAME SRC="javascript:alert('XSS');"></IFRAME>}
,
q{<!--filtered--><!--filtered-->}
,
q{<INPUT TYPE="IMAGE" SRC="javascript:alert('XSS');">}
,
q{<!--filtered-->}
,
q{<IMG SRC="javascript:alert('XSS');">}
,
q{<img />}
,
q{<IMG SRC=javascript:alert('XSS')>}
,
q{<img />}
,
q{<IMG DYNSRC="javascript:alert('XSS');">}
,
q{<img />}
,
q{<IMG LOWSRC="javascript:alert('XSS');">}
,
q{<img />}
,
q{exp/*<XSS STYLE='no\xss:noxss("*//*");
<STYLE>li \{list-style-image: url("javascript:alert('XSS')");\}
</STYLE><UL><LI>XSS},
q{exp/*<!--filtered--><!--filtered--><!--filtered-->}
,
q{<IMG SRC='vbscript:msgbox("XSS")'>}
,
q{<img />}
,
q{<!--filtered--><!--filtered-->}
,
q{<IMG SRC="livescript:[code]">}
,
q{<img />}
,
q{<META HTTP-EQUIV="refresh" CONTENT="0;url=javascript:alert('XSS');">}
,
q{<!--filtered-->}
,
q{<META HTTP-EQUIV="refresh" CONTENT="0;url=data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K">}
,
q{<!--filtered-->}
,
q{<!--filtered-->}
,
q{<IMG SRC="mocha:[code]">}
,
q{<img />}
,
q{<!--filtered--><!--filtered-->}
,
q{<OBJECT classid=clsid:ae24fdae-03c6-11d1-8b76-0080c744f389><param name=url value=javascript:alert('XSS')></OBJECT>}
,
q{<!--filtered--><!--filtered--><!--filtered-->}
,
q{<!--filtered--><!--filtered-->}
,
q{a="get"; b="URL(""; c="javascript:"; d="alert('XSS');")";}
,
q{a="get";
b="URL("";
c="javascript:";
d="alert('XSS');")";}
,
q{<STYLE TYPE="text/javascript">alert('XSS');</STYLE>}
,
q{<!--filtered--><!--filtered-->}
,
q{<IMG STYLE="xss:expr/*XSS*/ession(alert('XSS'))">}
,
q{<img />}
,
q{<XSS STYLE="xss:expression(alert('XSS'))">}
,
q{<!--filtered-->}
,
q{<STYLE>.XSS\{background-image:url("javascript:alert('XSS')");\}
</STYLE><A CLASS=XSS></A>},
q{<!--filtered--><!--filtered--><a></a>}
,
q{<STYLE type="text/css">BODY\{background:url("javascript:alert('XSS')")\}
</STYLE>},
q{<!--filtered--><!--filtered-->}
,
q{<LINK REL="stylesheet" HREF="javascript:alert('XSS');">}
,
q{<!--filtered-->}
,
q{<!--filtered-->}
,
q{<!--filtered--><!--filtered-->}
,
q{<!--filtered-->}
,
q{<!--filtered--><!--filtered-->}
,
q{<TABLE BACKGROUND="javascript:alert('XSS')"></TABLE>}
,
q{<table></table>}
,
q{<TABLE><TD BACKGROUND="javascript:alert('XSS')"></TD></TABLE>}
,
q{<table><!--filtered--><!--filtered--></table>}
,
q{<HTML xmlns:xss>}
,
q{<!--filtered-->}
,
q{<XML ID=I><X><C><![CDATA[<IMG SRC="javas]]><![CDATA[cript:alert('XSS');">]]>}
,
q{<!--filtered--><!--filtered--><!--filtered--><!--filtered--><!--filtered-->]]>}
,
q{<XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML>}
,
q{<!--filtered--><i><b><img /></b></i><!--filtered-->}
,
q{<!--filtered--><!--filtered-->}
,
q{<HTML><BODY>}
,
q{<!--filtered--><!--filtered-->}
,
q{<!--[if gte IE 4]>}
,
q{<!--filtered-->}
,
q{<META HTTP-EQUIV="Set-Cookie" Content="USERID=<SCRIPT>alert('XSS')</SCRIPT>">}
,
q{<!--filtered-->}
,
q{<!--filtered-->}
,
q{<!--filtered--><!--filtered-->}
,
q{<!--filtered--><!--filtered--><!--filtered-->'"-->}
,
q{<? echo('<SCR)';}
,
q{<!--filtered-->}
,
q{<BR SIZE="&\{alert('XSS')\}
">},
q{<br />}
,
q{<}
,
q{<!--filtered-->}
,
q{<IMG SRC=JaVaScRiPt:alert('XSS')>}
,
q{<img />}
,
q{<IMG SRC=javascript:alert("XSS")>}
,
q{<img />}
,
q{<IMG SRC=`javascript:alert("RSnake says, 'XSS'")`>}
,
q{<img />}
,
q{<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>}
,
q{<img />}
,
q{<IMG SRC=javascript:alert('XSS')>}
,
q{<img />}
,
q{<IMG SRC=javascript:alert('XSS')>}
,
q{<img />}
,
q{<DIV STYLE="background-image:\0075\0072\006C\0028'\006a\0061\0076\0061\0073\0063\0072\0069\0070\0074\003a\0061\006c\0065\0072\0074\0028.1027\0058.1053\0053\0027\0029'\0029">}
,
q{<div style=""></div>}
,
q{<IMG SRC=javascript:alert('XSS')>}
,
q{<img />}
,
q{<HEAD><META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=UTF-7"> </HEAD>+ADw-SCRIPT+AD4-alert('XSS');+ADw-/SCRIPT+AD4-}
,
q{<!--filtered--><!--filtered--> <!--filtered-->+ADw-SCRIPT+AD4-alert('XSS');+ADw-/SCRIPT+AD4-}
,
q{\";alert('XSS');//}
,
q{\";alert('XSS');//}
,
q{</TITLE><SCRIPT>alert("XSS");</SCRIPT>}
,
q{<!--filtered--><!--filtered--><!--filtered-->}
,
q{<STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>}
,
q{<!--filtered--><!--filtered-->}
,
q{<IMG SRC="jav ascript:alert('XSS');">}
,
q{<img />}
,
q{<IMG SRC="jav	ascript:alert('XSS');">}
,
q{<img />}
,
q{<IMG SRC="jav
ascript:alert('XSS');">}
,
q{<img />}
,
q{<IMG SRC="jav
ascript:alert('XSS');">}
,
q{<img />}
,
q{<IMG}
,
q{<!--filtered-->}
,
q{perl -e 'print "<IMG SRC=java\0script:alert("XSS")>";'> out}
,
q{perl -e 'print "<img />";'> out}
,
q{perl -e 'print "&<SCR\0IPT>alert("XSS")</SCR\0IPT>";' > out}
,
q{perl -e 'print "&<!--filtered-->alert("XSS")<!--filtered-->";' > out}
,
q{<IMG SRC="  javascript:alert('XSS');">}
,
q{<img />}
,
q{<!--filtered--><!--filtered-->}
,
q{<BODY onload!#$%&()*~+-_.,:;?@[/|\]^`=alert("XSS")>}
,
q{<!--filtered-->}
,
q{<!--filtered-->}
,
q{<SCRIPT SRC=//ha.ckers.org/.j>}
,
q{<!--filtered-->}
,
q{<IMG SRC="javascript:alert('XSS')"}
,
q{<!--filtered-->}
,
q{<!--filtered-->}
,
q{<<SCRIPT>alert("XSS");//<</SCRIPT>}
,
q{<<!--filtered--><!--filtered-->}
,
q{<IMG """><SCRIPT>alert("XSS")</SCRIPT>">}
,
q{<img /><!--filtered--><!--filtered-->">}
,
q{<SCRIPT>a=/XSS/}
,
q{<!--filtered--><!--filtered-->}
,
q{<!--filtered--><!--filtered-->}
,
q{<!--filtered--><!--filtered-->}
,
q{<!--filtered--><!--filtered-->}
,
q{<!--filtered--><!--filtered-->}
,
q{<!--filtered--><!--filtered-->}
,
q{<!--filtered--><!--filtered-->}
,
q{<A HREF="h}
,
q{<!--filtered-->}
,
q{<a>XSS</a>}
,
q{<a>XSS</a>}
,
q{<a>XSS</a>}
,
q{<a>XSS</a>}
,
q{<img alt="test test" />}
,
q{<img alt="test test" />}
,
q{<img alt=test test />}
,
q{<img alt="test&#10;test" />}
,
);
}