Symfony/Security para PHP: guia completo com exemplos práticos
Symfony/Security é um componente poderoso e flexível do ecossistema Symfony, projetado para implementar autenticação (verificação de identidade) e autorização (controle de acesso) em aplicações PHP. Ele oferece aos desenvolvedores uma arquitetura pronta para proteger rotas, gerenciar sessões, trabalhar com senhas e integrar-se a diversos provedores de usuários (banco de dados, LDAP, OAuth).
Por que usar esta biblioteca? No desenvolvimento web moderno, segurança não é opcional — é requisito obrigatório. Symfony/Security permite abstrair tarefas repetitivas: hash de senhas, criação de formulários de login, verificação de papéis e tokens. Em vez de reinventar a roda, você adota um padrão industrial usado em milhares de projetos ao redor do mundo. O componente integra-se facilmente tanto com o framework Symfony quanto com outras aplicações PHP através do pacote symfony/security-core.
Principais recursos incluem: suporte a múltiplos "firewalls" para diferentes partes da aplicação, sistema flexível de provedores de usuários, gerenciamento automático de sessões e cookies, além de proteção integrada contra ataques CSRF e força bruta. A biblioteca segue o princípio "security by default", tornando-a ideal para projetos de qualquer porte.
Instalação
A instalação é feita via Composer — o gerenciador de pacotes padrão do PHP. Execute o seguinte comando na raiz do seu projeto:
composer require symfony/security-bundle
Se você usa Symfony Flex (recomendado), o recipe configurará automaticamente a estrutura básica. Para projetos standalone (sem framework), instale o núcleo:
composer require symfony/security-core symfony/security-http symfony/security-csrf
Início rápido: exemplo funcional mínimo
Vamos criar uma página protegida simples. Primeiro, certifique-se de ter o Symfony instalado (versão 6.4+). Criaremos um controller e configuraremos a segurança.
Passo 1: Configuração do security.yaml
# config/packages/security.yaml
security:
enable_authenticator_manager: true
providers:
in_memory:
memory:
users:
admin:
password: '$2y$13$...' # hash da senha "admin123"
roles: ['ROLE_ADMIN']
firewalls:
main:
lazy: true
provider: in_memory
form_login:
login_path: login
check_path: login
logout:
path: /logout
access_control:
- { path: ^/admin, roles: ROLE_ADMIN }
Passo 2: Controller
// src/Controller/SecurityController.php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
class SecurityController extends AbstractController
{
#[Route('/login', name: 'login')]
public function login(AuthenticationUtils $authenticationUtils): Response
{
$error = $authenticationUtils->getLastAuthenticationError();
$lastUsername = $authenticationUtils->getLastUsername();
return $this->render('security/login.html.twig', [
'last_username' => $lastUsername,
'error' => $error,
]);
}
#[Route('/admin', name: 'admin')]
public function admin(): Response
{
$this->denyAccessUnlessGranted('ROLE_ADMIN');
return new Response('Bem-vindo ao painel administrativo!');
}
}
Passo 3: Template de login (Twig)
{# templates/security/login.html.twig #}
{% if error %}
{{ error.mes
Também na biblioteca
PDF em Rust: guia completo com exemplos práticos
Vision para Swift: guia completo com exemplos práticos
Trabalhando com S3 e armazenamentos em nuvem em C++: biblioteca AWS SDK para C++
Registro em Go (Golang): melhores bibliotecas e soluções para produção
range-v3 para C++: guia completo com exemplos
Recommendations