Mojolicious-Plugin-CSRFDefender
view release on metacpan or search on metacpan
lib/Mojolicious/Plugin/CSRFDefender.pm view on Meta::CPAN
$self->error_content($conf->{error_content} || 'Forbidden');
$self->onetime($conf->{onetime} || 0);
if ($conf->{error_template}) {
my $file = $app->home->rel_file($conf->{error_template});
$self->error_template($file);
}
# input check
$app->hook(before_dispatch => sub {
my ($c) = @_;
unless ($self->_validate_csrf($c)) {
my $content;
if ($self->error_template) {
my $file = file($self->error_template);
$content = $file->slurp;
}
else {
$content = $self->{error_content},
}
$c->render(
status => $self->{error_status},
lib/Mojolicious/Plugin/CSRFDefender.pm view on Meta::CPAN
my $token = $self->_get_csrf_token($c);
my $p_name = $self->parameter_name;
my $body = $c->res->body;
$body =~ s{(<form\s*[^>]*method=["']POST["'][^>]*>)}{$1\n<input type="hidden" name="$p_name" value="$token" />}isg;
$c->res->body($body);
});
return $self;
}
sub _validate_csrf {
my ($self, $c) = @_;
my $p_name = $self->parameter_name;
my $s_name = $self->session_key;
my $request_token = $c->req->param($p_name);
my $session_token = $c->session($s_name);
if ($c->req->method eq 'POST') {
return 0 unless $request_token;
return 0 unless $session_token;
( run in 0.680 second using v1.01-cache-2.11-cpan-39bf76dae61 )