WordPress Extremo
- Como Criar um Plugin WordPress com Composer e PSR-4 – WordPress Extremo Dia 1
- Como Usar Serviços em Plugins para Código Limpo e Desacoplado – WordPress Extremo Dia 2
- Como Usar Repositórios em Plugins para Separar Lógica de Dados – WordPress Extremo Dia 3
- Injeção de Dependência Manual em Plugins WordPress – WordPress Extremo Dia 4
- Hooks Avançados no WordPress: apply_filters, do_action e boas práticas
- Criando Comandos WP-CLI Personalizados para Plugins WordPress
- Criando Blocos Personalizados com Gutenberg e React
- Estilizando Blocos Gutenberg com CSS e Classes Dinâmicas
- Cor, Alinhamento e Estilo Dinâmico com Gutenberg + React
- Ícones, Imagens e Classes Personalizadas no Gutenberg
- Componentes Reutilizáveis e Atributos Compostos em Blocos Gutenberg
- Conectando Blocos com a REST API do WordPress
- Bloco Dinâmico com Renderização no Servidor
- Filtrando Posts por Categoria no Editor do Bloco
- Bloco de Posts com Filtro por Múltiplas Categorias
- Como Gerenciar Logs e Erros Internos em Plugins WordPress (Do Jeito Certo)
- Tratamento de Erros e Uso Inteligente de Exceptions em Plugins WordPress
- Segurança Profunda em Plugins WordPress
Fala, pessoal! Aqui é o Asllan Maciel, e hoje o papo é sério: segurança em plugins WordPress.
Muito bom que você esteja acompanhando aqui! Vamos com tudo para o Dia 09/14 – Segurança Profunda em Plugins WordPress.
“Plugins poderosos exigem segurança poderosa.”
Não basta só funcionar — seu código precisa resistir a tentativas de invasão, injeção e mau uso.
Vamos aplicar medidas simples mas profundas, que não são apenas boas práticas — são obrigatórias para quem quer publicar, vender ou distribuir plugins com responsabilidade.
🧠 Por que segurança é crítica?
Um plugin inseguro:
- Vira porta de entrada para invasores.
- Pode expor dados do banco de dados ou credenciais da API.
- Compromete o site inteiro do cliente (e sua reputação).
Um plugin seguro:
- Minimiza riscos de ataques (XSS, SQLi, CSRF, etc).
- Protege o site mesmo em ambientes mal configurados.
- Garante compatibilidade com políticas de hospedagem e marketplace (como o repositório oficial do WP).
🧩 Principais Ameaças que Vamos Tratar
Tipo de Ameaça | Descrição Rápida |
---|---|
XSS | Injeção de scripts maliciosos em campos do plugin. |
CSRF | Execução de ações sem autorização via requisições forjadas. |
SQLi | Injeção de comandos SQL em consultas inseguras. |
Directory Traversal | Acesso a arquivos sensíveis via caminhos manipulados. |
Permissões e Nonces | Ações críticas executadas por quem não deveria. |
🛡️ Checklist de Segurança Profunda
1. Escapar e Sanitizar Sempre
esc_html()
,esc_attr()
,esc_url()
no output.sanitize_text_field()
,sanitize_email()
no input.
$nome = sanitize_text_field($_POST['nome']);
echo esc_html($nome);
2. Verifique a Capacidade do Usuário
Nunca execute ações sensíveis sem isso:
if (!current_user_can('manage_options')) {
wp_die('Sem permissão!');
}
3. Use Nonces para Formularios e Ações
wp_nonce_field('minha_acao', 'minha_nonce');
if (!isset($_POST['minha_nonce']) || !wp_verify_nonce($_POST['minha_nonce'], 'minha_acao')) {
wp_die('Requisição inválida.');
}
4. Evite SQL direto, use $wpdb com preparo
$wpdb->prepare("SELECT * FROM wp_users WHERE user_login = %s", $login);
5. Nunca Confie em $_GET, $_POST, $_REQUEST
- Sempre valide e sanitize.
- Preferencialmente passe por funções ou classes intermediárias.
🔐 Proteções Extras no Plugin
🔸 Arquivos protegidos com:
defined('ABSPATH') or die('No script kiddies please!');
🔸 Carregamento condicional apenas quando necessário:
if (is_admin()) {
include 'admin/class-admin.php';
}
✅ Boas Práticas Adicionais
- Defina permissões nos diretórios do plugin:
755
em pastas,644
em arquivos. - Evite expor dados no frontend desnecessariamente via
wp_localize_script()
. - Implemente logs de ações críticas (vimos isso no Dia 07/14 😉).
- Revise dependências externas — bibliotecas inseguras são alvos.
💡 Extra: Segurança com APIs de Terceiros
- Nunca armazene segredos no JS.
- Use
.env
(em casos fora do WP) ou constants emwp-config.php
. - Nunca exponha access tokens.
📦 Estrutura de Arquivos Segura
includes/
├── admin/
│ └── class-admin.php
├── public/
│ └── class-public.php
├── security/
│ └── class-sanitizer.php
Cada camada protegida. Cada responsabilidade clara.
🚀 Finalizando
Com essas práticas, você sai da base e entra no grupo dos devs profissionais.
Segurança não é opcional. É diferencial. É reputação. É responsabilidade.