CGI-Plus
view release on metacpan or search on metacpan
lib/CGI/Plus.pm view on Meta::CPAN
package CGI::Plus;
use strict;
use Carp;
use CGI::Safe 'taint';
use base 'CGI::Safe';
use String::Util ':all';
use CGI::Cookie;
# version
our $VERSION = '0.15';
# Debug::ShowStuff
# use Debug::ShowStuff ':all';
# use Debug::ShowStuff::ShowVar;
# enable file uploads
$CGI::DISABLE_UPLOADS = 0;
# maximum upload: 5 mb
$CGI::POST_MAX = 5 * 1024 * 1024;
# set path to empty string
$ENV{'PATH'} = '';
=head1 NAME
CGI::Plus -- Extra utilities for CGI
=head1 Description
This module adds a few enhancements to
L<CGI::Safe|http://search.cpan.org/~ovid/CGI-Safe/lib/CGI/Safe.pm>,
which itself adds a few security-based enancements to
L<CGI.pm|http://perldoc.perl.org/CGI.html>. The enhancement are almost
entirely additions - the only method that is overridden is new(), and
the changes there are only addition. The enhancements in this module entirely
use the object-oriented interface.
=head1 SYNOPSIS
use CGI::Plus;
my ($cgi, $cookie, $url, $param);
# new CGI::Plus object
$cgi = CGI::Plus->new();
# turn on checks for cross-site request forgeries (CSRF)
$cgi->csrf(1);
# get a cookie and look at its values
$cookie = $cgi->incoming_cookies->{'mycookie'};
print $cookie->{'values'}->{'x'}, "\n";
print $cookie->{'values'}->{'y'}, "\n";
# more concise way to get an incoming cookie
$cookie = $cgi->ic->{'mycookie'};
# resend a cookie, but change one of its values
$cookie = $cgi->resend_cookie('mycookie');
$cookie->{'values'}->{'x'} = 2;
# add an outgoing cookie, set some values
$cookie = $cgi->new_send_cookie('newcookie');
$cookie->{'values'}->{'val1'} = '1';
$cookie->{'values'}->{'val2'} = '2';
# output HTTP header with outgoing cookies, including CSRF
# check cookie, automatically added
print $cgi->header_plus;
# output header again if it hasn't already been sent, but if it
# has then output an empty string
print $cgi->header_plus;
# output the URL of the current page but set a new value
# for the "t" param and remove the "j" param
$url = $cgi->self_link(params=>{t=>2, j=>undef});
# check if the submitted form includes the value of the CSRF
lib/CGI/Plus.pm view on Meta::CPAN
# must be in csrf mode
if (! $cgi->csrf)
{ croak 'cannot check CSRF when not in CSRF mode' }
# get name of csrf cookie
$name = $cgi->csrf_name;
# get csrf cookie
$cookie = $cgi->oc->{$name};
$cookie or return 0;
# get cookie value
$cookie_value = $cookie->{'values'}->{'v'};
$cookie_value or return 0;
# get form value
$form_value = $cgi->param($name);
$form_value or return 0;
# return true if same
if ($cookie_value eq $form_value)
{ return 1 }
# else return false
return 0;
}
#
# csrf_check
#------------------------------------------------------------------------------
# return true
1;
__END__
=head1 TERMS AND CONDITIONS
Copyright (c) 2012 by Miko O'Sullivan. All rights reserved. This program is
free software; you can redistribute it and/or modify it under the same terms
as Perl itself. This software comes with B<NO WARRANTY> of any kind.
=head1 AUTHOR
Miko O'Sullivan
F<miko@idocs.com>
=head1 VERSION
=over
=item Version 0.10 November 22, 2012
Initial release
=item Version 0.12 November 28, 2012
Fixing prerequisite lists in CPAN upload.
=item Version 0.13 April 25, 2014
Fixed error in META.yml.
=item Version 0.14 May 23, 2014
Fixed bugs in test script.
=item Version 0.15 January 4, 2015
Gave tests names.
=back
=cut
( run in 0.788 second using v1.01-cache-2.11-cpan-b16cb0d3907 )