package HTML::StripScripts::Parser; use strict; use vars qw($VERSION); $VERSION = '0.06'; # $Rev: 101 $ =head1 NAME HTML::StripScripts::Parser - XSS filter using HTML::Parser =head1 SYNOPSIS use HTML::StripScripts::Parser; my $hss = HTML::StripScripts::Parser->new( { Context => 'Document' }, strict_comment => 1, strict_names => 1, ); $hss->parse_file("foo.html"); print $hss->filtered_document; =head1 DESCRIPTION This class subclasses both L and L, adding the input methods that L provides to L. See L and L. =cut =head1 CONSTRUCTORS =over =item new ( CONFIG, [PARSER_OPTIONS] ) Creates a new C object, and invokes the L init() method so that tags are fed to the correct L methods. The CONFIG parameter has the same semantics as the CONFIG parameter to the L constructor. Any PARSER_OPTIONS supplied will be passed on to the L init method, allowing you to influence the way the input is parsed. You cannot use PARSER_OPTIONS to set L event handlers, since C uses all of the event hooks itself. =cut use HTML::StripScripts; use HTML::Parser; use base qw(HTML::StripScripts HTML::Parser); sub hss_init { my ($self, $cfg, @parser_options) = @_; $self->init( @parser_options, api_version => 3, start_document_h => ['input_start_document', 'self'], start_h => ['input_start', 'self,text'], end_h => ['input_end', 'self,text'], text_h => ['input_text', 'self,text'], default_h => ['input_text', 'self,text'], declaration_h => ['input_declaration', 'self,text'], comment_h => ['input_comment', 'self,text'], process_h => ['input_process', 'self,text'], end_document_h => ['input_end_document', 'self'], # workaround for http://rt.cpan.org/NoAuth/Bug.html?id=3954 ( $HTML::Parser::VERSION =~ /^3\.(29|30|31)$/ ? ( strict_comment => 1 ) : () ), ); $self->SUPER::hss_init($cfg); } =back =head1 METHODS See L for input methods, L for output methods. =head1 SUBCLASSING The C class is subclassable. Filter objects are plain hashes. The hss_init() method takes the same arguments as new(), and calls the initialization methods of both C and C. See L and L. =head1 SEE ALSO L, L =head1 AUTHOR Nick Cleaton Enick@cleaton.netE =head1 COPYRIGHT Copyright (C) 2003 Nick Cleaton. All Rights Reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut 1;