Nonce
O termo Nonce em WordPress (uma abreviação para Number once, ou número uma vez) refere-se a um token de segurança criptográfico, sensível ao tempo e à ação, fundamental para proteger seu site contra requisições maliciosas. Ele é a principal defesa do WordPress contra ataques de Cross-Site Request Forgery (CSRF).
Conceito e mecanismo de Ação
Apesar do nome “Number once”, o Nonce não é usado apenas uma vez, mas sim por um curto período de validade. Ele funciona como um hash único que prova que uma determinada requisição foi gerada pelo próprio site e não por uma fonte externa mal-intencionada.
1. Geração (criação do token):
O WordPress gera o Nonce usando a função wp_create_nonce(). Este token é o resultado de um hash que combina vários fatores de segurança, tornando-o único para a intenção, o usuário e o site:
- O ID do Usuário: Garante que o Nonce é específico para o usuário que está logado.
- Uma Ação Específica (Contexto): O Nonce é “vinculado” a uma intenção clara (ex:
delete-post,save-settings). Isso impede que um Nonce criado para uma ação seja usado em outra. - O Período de Tempo (Tick): Um valor que muda a cada 12 horas. Este fator garante que o Nonce tenha uma vida útil curta, geralmente 24 horas no total, tornando-o inútil após esse período.
- Chaves de Segurança Secretas: O $SALT$ e $KEY$ únicos definidos no seu arquivo
wp-config.php, tornando o hash impossível de ser replicado por um atacante externo.
O resultado é um hash que atua como um “bilhete de segurança” para a ação.
2. Implementação e distribuição:
O Nonce é injetado no código-fonte onde a ação é esperada para ser enviado junto com a requisição:
- Em formulários: É embutido como um campo oculto (ex:
<input type="hidden" name="_wpnonce" value="...">). - Em URLs: É anexado como um parâmetro de consulta (
?_wpnonce=...) para links que disparam ações importantes, como exclusão de itens ou redefinição de senhas.
3. Verificação (validação da requisição):
Quando o usuário executa a ação e envia a requisição, o WordPress usa a função wp_verify_nonce() para validar o token. Essa verificação tem dois objetivos principais:
- Correspondência: O Nonce enviado corresponde ao Nonce que o WordPress esperava para aquela combinação de usuário, ação e período de tempo.
- Validade temporal: O Nonce não expirou (ou seja, ainda está dentro do prazo máximo de 24 horas a partir do seu tick de geração).
Se a verificação falhar, o WordPress interrompe o processo e geralmente exibe uma mensagem de “Você não tem permissão para fazer isso”, protegendo o site.
Proteção contra CSRF
O principal ataque evitado pelo Nonce é o Cross-Site Request Forgery (CSRF), onde um atacante tenta enganar um usuário logado (ex: um administrador) a enviar uma requisição forçada e maliciosa para o site WordPress dele sem o seu conhecimento.
Sem o Nonce, um link como meu-site.com/wp-admin/post.php?action=delete&post=10 seria executado pelo WordPress, pois a requisição viria de um usuário autenticado.
Com o Nonce, o link exigiria um token válido anexado (?_wpnonce=[hash]). Como o site malicioso não tem acesso às chaves secretas do site nem ao hash de tempo específico, ele não pode gerar um Nonce válido. A requisição forçada falhará na verificação, e a ação será bloqueada, garantindo que apenas ações intencionais e válidas sejam executadas.
