NAME

Mojolicious::Plugin::DeCSRF - Defend from CSRF attacks centrally.

SYNOPSIS

# Mojolicious::Lite
#!/usr/bin/env perl

use Mojolicious::Lite;

plugin 'DeCSRF' => {
  on_mismatch => sub {
    shift->render(template => '503', status => 503);
  },
  token_length => 8,
  token_name => 'csrf',
  urls => qw~/protected~
};

get '/' => sub {
  my $self = shift;
} => 'index';

get '/protected' => sub {
  my $self = shift;
} => 'protected';

app->start();

__DATA__
@@ layouts/default.html.ep
<html>
  <body><%= content %></body>
</html>
@@ protected.html.ep
% layout 'default';
<a href="<%= decsrf->url('index') %>">Home</a>
@@ index.html.ep
% layout 'default';
<a href="<%= decsrf->url('protected') %>">Protected</a>
@@ 503.html.ep
Service error!

DESCRIPTION

Mojolicious::Plugin::DeCSRF is a Mojolicious plugin that defend the framework from CSRF attacks centrally. With "good" strategy you have flexible control of the urls. "Good" strategy is wrap all of the urls with decsrf->url(URL) and control all urls that must be protected at one place with decsrf->urls().

OPTIONS

Options can change at any time.

decsrf->on_mismatch

Set custom mismatch handling callback. Default is $self->render( text => "Forbidden!", status => 403);

decsrf->on_mismatch( sub {
  shift->render(template => '503', status => 503);
} );

decsrf->token_length

Set custom token length. Default length is 4 symbols from 'A-Z', 'a-z', '0-9', '@', '$', '-', '_' ranges.

decsrf->token_length(40);

decsrf->token_name

Set custom token name in url and session parameters. Default name is 'token'.

decsrf->token_name('csrf');

decsrf->urls

Set urls that must be protected. perlre can used.

decsrf->urls([qw~/protected /.*?ected~]);
push @{decsrf->urls}, qw~/protected /.*?ected~;

METHODS

Mojolicious::Plugin::DeCSRF inherits all methods from Mojolicious::Plugin and implements the following new ones.

register

$plugin->register();

Register plugin in Mojolicious application.

decsrf->url

Add 'token' param to url that match with decsrf->urls.

#/protected?token=XXXX
decsrf->url('/protected');

#/protected?foo=bar&token=XXXX
decsrf->url('/protected?foo=bar');

AUTHOR

Ilya Tokarev <sysadm@cpan.org>

COPYRIGHT AND LICENSE

Copyright (C) 2013, Ilya Tokarev.

This program is free software, you can redistribute it and/or modify it under the terms of the Artistic License version 2.0.

SEE ALSO

Mojolicious, Mojolicious::Guides, http://mojolicio.us.