CSRF protection and security headers middleware -- secure your routes with drop-in middleware. For CORS, use marko/cors.
composer require marko/securityCsrfMiddleware and SecurityHeadersMiddleware are registered globally, so every state-changing route is protected and every response carries security headers. Opt a route out explicitly:
use Marko\Routing\Attributes\Post;
use Marko\Routing\Attributes\WithoutMiddleware;
use Marko\Security\Middleware\CsrfMiddleware;
class WebhookController
{
#[Post('/webhooks/stripe')]
#[WithoutMiddleware(CsrfMiddleware::class)]
public function receive(): Response
{
return new Response('Received');
}
}Full usage, API reference, and examples: marko/security