NAME

PAGI::Middleware::CSRF - Cross-Site Request Forgery protection middleware

SYNOPSIS

use PAGI::Middleware::Builder;

my $app = builder {
    enable 'CSRF',
        secret       => 'your-secret-key',
        token_header => 'X-CSRF-Token',
        cookie_name  => 'csrf_token',
        safe_methods => ['GET', 'HEAD', 'OPTIONS'];
    $my_app;
};

DESCRIPTION

PAGI::Middleware::CSRF provides protection against Cross-Site Request Forgery attacks by validating tokens on state-changing requests.

CONFIGURATION

  • secret (required)

    Secret key used for token generation.

  • token_header (default: 'X-CSRF-Token')

    Header name to look for the CSRF token.

  • token_param (default: '_csrf_token')

    Form parameter name to look for the CSRF token.

  • cookie_name (default: 'csrf_token')

    Cookie name for the CSRF token.

  • safe_methods (default: ['GET', 'HEAD', 'OPTIONS', 'TRACE'])

    HTTP methods that don't require CSRF validation.

USAGE

The CSRF middleware uses a double-submit cookie pattern:

1. A token is generated and stored in a cookie 2. The same token must be submitted with unsafe requests (POST, PUT, etc.) 3. The submitted token is compared with the cookie token

To use in your application:

1. For forms, include the token in a hidden field:

<input type="hidden" name="_csrf_token" value="<%= $scope->{csrf_token} %>">

2. For AJAX requests, include the token in a header:

fetch('/api/resource', {
    method: 'POST',
    headers: {
        'X-CSRF-Token': getCookie('csrf_token')
    }
});

SEE ALSO

PAGI::Middleware - Base class for middleware