Pular para o conteúdo
ERP

Checklist de segurança para ERP: vulnerabilidades e correções

Admin5 min de leitura
Checklist de segurança para ERP: vulnerabilidades e correções

Checklist de segurança para ERP: vulnerabilidades e correções

Data: 26/05/2026

---

Introdução

Os sistemas ERP são o coração das operações empresariais: armazenam dados financeiros, informações de clientes, processos de produção e muito mais. Um ponto fraco na segurança desses sistemas pode comprometer toda a organização, gerando perdas financeiras, danos à reputação e multas regulatórias.

Este artigo apresenta um checklist de segurança focado no desenvolvimento de ERP, detalhando as vulnerabilidades mais recorrentes e fornecendo exemplos de código que podem ser copiados e adaptados imediatamente. Cada item do checklist inclui:

  • O que observar – sintoma ou risco.
  • Como validar – técnica ou ferramenta de teste.
  • Correção recomendada – prática segura e trecho de código funcional.
  • A ideia é transformar a teoria em ação concreta, permitindo que equipes de desenvolvimento, QA e DevSecOps trabalhem de forma coordenada.

    Tecnologia e Inovação

    ---

    1. Validação de entrada – evitando injeções e scripts maliciosos

    VulnerabilidadeImpactoComo detectar
    SQL InjectionRoubo ou alteração de dados críticos.Testes com payloads como ' OR '1'='1 nas query strings.
    Cross‑Site Scripting (XSS)Execução de código JavaScript no navegador do usuário.Ferramentas como OWASP ZAP ou manualmente inserindo .

    Checklist

    • [ ] Sanitizar todos os parâmetros antes de enviá‑los ao banco.
    • [ ] Usar consultas parametrizadas ou ORMs que abstraem a construção de SQL.
    • [ ] Escapar saída HTML em todas as páginas que exibem dados do usuário.
    • [ ] Aplicar CSP (Content Security Policy) para limitar fontes de script.

    Exemplo em Java (Spring Boot) – consultas parametrizadas

    // Evita SQL Injection usando PreparedStatement
    

    String sql = "SELECT * FROM pedidos WHERE cliente_id = ?"; try (Connection conn = dataSource.getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) {

    ps.setInt(1, clienteId); ResultSet rs = ps.executeQuery();

    while (rs.next()) { // processa resultado } }

    Exemplo em Node.js (Express) – escaping de HTML

    const escapeHtml = require('escape-html');
    

    app.post('/comentario', (req, res) => { const texto = escapeHtml(req.body.texto); // impede XSS salvarComentario(texto); res.send('Comentário registrado'); });

    Exemplo em Python (FastAPI) – validação de tipos com Pydantic

    from fastapi import FastAPI, HTTPException
    

    from pydantic import BaseModel, conint

    app = FastAPI()

    class Pedido(BaseModel): cliente_id: conint(gt=0) # garante número inteiro positivo valor: float

    @app.post("/pedido") def criar(pedido: Pedido): # ORM já gera consultas seguras db.save(pedido.dict()) return {"msg": "Pedido criado"}

    ---

    2. Controle de acesso – autenticidade e integridade das sessões

    VulnerabilidadeImpactoComo detectar
    Broken AuthenticationUsuário não autorizado pode assumir contas ou executar ações privilegiadas.Testes de força‑bruta em endpoints de login, análise de tokens.
    Cross‑Site Request Forgery (CSRF)Ações indesejadas executadas em nome do usuário autenticado.Verificar ausência de tokens anti‑CSRF em formulários POST.

    Checklist

    • [ ] Exigir senhas fortes e aplicar hashing com algoritmo adaptativo (bcrypt, Argon2).
    • [ ] Implementar MFA (autenticação multifator) para usuários críticos.
    • [ ] Usar tokens JWT assinados com chave secreta forte e expiração curta.
    • [ ] Adicionar cabeçalhos SameSite nos cookies de sessão.
    • [ ] Incluir token CSRF em todos os formulários que alteram estado.

    Exemplo em Java (Spring Security) – senha com BCrypt

    import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
    

    BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(12); String hash = encoder.encode(senhaBruta); // salvar hash no banco

    Exemplo em Node.js (Express) – middleware CSRF com csurf

    const csrf = require('csurf');
    

    const cookieParser = require('cookie-parser');

    app.use(cookieParser()); app.use(csrf({ cookie: true }));

    app.get('/formulario', (req, res) => { // token inserido no template res.render('form', { csrfToken: req.csrfToken() }); });

    app.post('/processa', (req, res) => { // csurf valida automaticamente res.send('Processado com segurança'); });

    Exemplo em Python (FastAPI) – JWT com tempo de expiração

    from datetime import datetime, timedelta
    

    import jwt

    SECRET = "s3cr3t_k3y_!@#" ALGORITMO = "HS256"

    def gerar_token(usuario_id: int): payload = { "sub": usuario_id, "exp": datetime.utcnow() + timedelta(minutes=30) } return jwt.encode(payload, SECRET, algorithm=ALGORITMO)

    ---

    3. Configurações e gerenciamento de segredos

    VulnerabilidadeImpactoComo detectar
    Credenciais hardcodedCódigo-fonte expõe chaves de API, senhas ou tokens.Busca em repositórios por padrões como password= ou api_key.
    Insecure DeserializationDados manipulados podem ser transformados em objetos maliciosos.Testes enviando payloads binários ou JSON alterados.

    Checklist

    • [ ] Remover todas as credenciais do código e armazená‑las em cofres de segredos (AWS Secrets Manager, HashiCorp Vault).
    • [ ] Configurar variáveis de ambiente e garantir que não sejam logadas.
    • [ ] Desabilitar serialização automática de objetos não confiáveis.
    • [ ] Validar schemas de entrada antes de desserializar.
    • [ ] Aplicar políticas de permissão mínima nos recursos de nuvem.

    Exemplo em Java – carregando segredo via variável de ambiente

    String dbPassword = System.getenv("DB_PASSWORD");
    

    if (dbPassword == null) { throw new IllegalStateException("Variável DB_PASSWORD não configurada"); } DataSource ds = DataSourceBuilder.create() .url(System.getenv("DB_URL")) .username(System.getenv("DB_USER")) .password(dbPassword) .build();

    Exemplo em Node.js – uso de dotenv apenas em desenvolvimento

    if (process.env.NODE_ENV !== 'production') {
    

    require('dotenv').config(); // carrega .env local }

    // Sempre use process.env para acessar segredos const apiKey = process.env.PAYMENT_API_KEY; if (!apiKey) { throw new Error('API key não definida'); }

    Exemplo em Python – validação de JSON antes da desserialização

    from jsonschema import validate, ValidationError
    

    pedido_schema = { "type": "object", "properties": { "cliente_id": {"type": "integer"}, "valor": {"type": "number"}, }, "required": ["cliente_id", "valor"] }

    def processar(payload: dict): try: validate(instance=payload, schema=pedido_schema) except ValidationError as e: raise ValueError(f"Payload inválido: {e.message}")

    # prossegue com lógica segura

    ---

    4. Monitoramento, auditoria e resposta a incidentes

    Mesmo com todas as proteções, é essencial detectar rapidamente comportamentos anômalos.

    Checklist

    • [ ] Centralizar logs de aplicação, banco e firewall em um sistema de agregação (ELK, Graylog).
    • [ ] Registrar tentativas de login falhas e bloqueá‑las após N tentativas.
    • [ ] Habilitar alertas para alterações de privilégios ou exportação massiva de dados.
    • [ ] Manter um plano de resposta que inclua isolamento, análise forense e comunicação.

    Exemplo de configuração de log em Python (structlog)

    ```python import structlog import logging

    logging.basicConfig(level=logging.INFO, format="%(message)s") structlog.configure( processors=[ structlog.processors.TimeStamper(fmt="iso"), structlog.processors.JSONRenderer() ], logger_factory=structlog.stdlib.LoggerFactory(), )

    log = structlog.get_logger()

    def login(usuario, senha): # lógica de autenticação … if

    Artigos relacionados