369
if ( $Param{NoJavaScript} ) {
370
$Safety{Replace} ||= ${$String} =~ s{
371
<scrip.+?>(.+?|.?)</script>
374
$Safety{Replace} ||= ${$String} =~ s{
380
# remove <applet> tags
381
if ( $Param{NoApplet} ) {
382
$Safety{Replace} ||= ${$String} =~ s{
383
<apple.+?>(.+?)</applet>
388
# remove <Object> tags
389
if ( $Param{NoObject} ) {
390
$Safety{Replace} ||= ${$String} =~ s{
391
<objec.+?>(.+?)</object>
396
# remove style/javascript parts
397
if ( $Param{NoJavaScript} ) {
398
$Safety{Replace} ||= ${$String} =~ s{
399
<style.+?javascript(.+?|)>(.*)</style>
404
# remove <embed> tags
405
if ( $Param{NoEmbed} ) {
406
$Safety{Replace} ||= ${$String} =~ s{
412
# check each html tag
418
if ($Param{NoJavaScript}) {
420
# remove on action sub tags
421
$Safety{Replace} ||= $Tag =~ s{
422
\son.+?=(".+?"|'.+?'|.+?)(>|\s)
428
# remove entities sub tags
429
$Safety{Replace} ||= $Tag =~ s{
434
# remove javascript in a href links or src links
435
$Safety{Replace} ||= $Tag =~ s{
436
((\s|;)(background|url|src|href)=)('|"|)(javascript.+?)('|"|)(\s|>)
442
# remove link javascript tags
443
$Safety{Replace} ||= $Tag =~ s{
444
(<link.+?javascript(.+?|)>)
451
if ($Param{NoIntSrcLoad} || $Param{NoExtSrcLoad}) {
453
(<(.+?)\ssrc=(.+?)(\s.+?|)>)
457
if ($Param{NoIntSrcLoad} || ($Param{NoExtSrcLoad} && $URL =~ /(http|ftp|https):\//i)) {
458
$Safety{Replace} = 1;
370
# In UTF-7, < and > can be encoded to mask them from security filters like this one.
371
my $TagStart = '(?:<|[+]ADw-)';
372
my $TagEnd = '(?:>|[+]AD4-)';
374
# Replace as many times as it is needed to avoid nesting tag attacks.
379
if ( $Param{NoJavaScript} ) {
380
$Replaced += ${$String} =~ s{
381
$TagStart script.*? $TagEnd .*? $TagStart /script \s* $TagEnd
384
$Replaced += ${$String} =~ s{
385
$TagStart script.*? $TagEnd .+? ($TagStart|$TagEnd)
389
# remove style/javascript parts
390
$Replaced += ${$String} =~ s{
391
$TagStart style[^>]+?javascript(.+?|) $TagEnd (.*?) $TagStart /style \s* $TagEnd
395
# remove MS CSS expressions (JavaScript embedded in CSS)
397
($TagStart style[^>]+? $TagEnd .*? $TagStart /style \s* $TagEnd)
400
if ( index($1, 'expression(' ) > -1 ) {
467
# replace original tag with clean tag
410
# remove <applet> tags
411
if ( $Param{NoApplet} ) {
412
$Replaced += ${$String} =~ s{
413
$TagStart applet.*? $TagEnd (.*?) $TagStart /applet \s* $TagEnd
418
# remove <Object> tags
419
if ( $Param{NoObject} ) {
420
$Replaced += ${$String} =~ s{
421
$TagStart object.*? $TagEnd (.*?) $TagStart /object \s* $TagEnd
427
if ( $Param{NoSVG} ) {
428
$Replaced += ${$String} =~ s{
429
$TagStart svg.*? $TagEnd (.*?) $TagStart /svg \s* $TagEnd
434
# remove <embed> tags
435
if ( $Param{NoEmbed} ) {
436
$Replaced += ${$String} =~ s{
437
$TagStart embed.*? $TagEnd
442
# check each html tag
444
($TagStart.+?$TagEnd)
448
if ($Param{NoJavaScript}) {
450
# remove on action attributes
451
$Replaced += $Tag =~ s{
452
\son.+?=(".+?"|'.+?'|.+?)($TagEnd|\s)
456
# remove entities in tag
457
$Replaced += $Tag =~ s{
462
# remove javascript in a href links or src links
463
$Replaced += $Tag =~ s{
464
((\s|;)(background|url|src|href)=)('|"|)(javascript.+?)('|"|)(\s|$TagEnd)
470
# remove link javascript tags
471
$Replaced += $Tag =~ s{
472
($TagStart link .+? javascript (.+?|) $TagEnd)
476
# remove MS CSS expressions (JavaScript embedded in CSS)
477
$Replaced += $Tag =~ s{
478
\sstyle=("|')[^\1]*?expression[(][^\1]*?\1($TagEnd|\s)
486
if ($Param{NoIntSrcLoad} || $Param{NoExtSrcLoad}) {
488
($TagStart (.+?) \s src=(.+?) (\s.+?|) $TagEnd)
492
if ($Param{NoIntSrcLoad} || ($Param{NoExtSrcLoad} && $URL =~ /(http|ftp|https):\//i)) {
502
# replace original tag with clean tag
506
$Safety{Replace} += $Replaced;
471
510
# check ref && return result like called
472
511
if ($StringScalar) {