Site

Segurança, IP Binding e Boas Práticas v3

Checklist operacional para APIs, clients e plugins em produção.


Allowlist / IP binding

// bootstrap/config/auth.php
'allowed' => [
    '203.0.113.10',      // seu IP
    'app.meusite.com',
    'https://app.amigo.com',
],
  • ['*'] — aberto (útil em client público)
  • Lista — basta 1 item casar (IP ou domínio)
  • Negado → 403 automático em /api/*

Tokens

  • Plain text só na criação — banco guarda SHA-256
  • Use abilities mínimas em tokens de integração
  • Revogue no ban (revokeAllTokens)
  • Não logue Bearer tokens

CSRF

  • Web: sempre :csrf em formulários
  • API / webhooks / OAuth callback: withoutCsrf consciente
  • Detalhes: CSRF

Models & mass assignment

// Bloqueia tudo — exige $fillable
protected array $guarded = ['*'];

// Ou libera tudo e filtre no check()
protected array $guarded = [];

// Ou bloqueia colunas sensíveis
protected array $guarded = ['id', 'email', 'password'];
🚨$guarded = []
Permite mass assignment em todas as colunas. Só use se create/update forem alimentados exclusivamente por $req->check([...]).

Lazy loading ($allowLazy)

Com debug/lazy restrito, declare relações permitidas:

protected array $allowLazy = ['orders', 'profile', 'subscription'];

Use com sabedoria — lazy livre causa N+1 e lentidão. Prefira with() / load(). Veja ORM.


Plugins licenciados

authorize_plugin('profile_panel_hash', [
    'title' => 'Plugin Inválido',
    'message' => 'Seu plugin não possui licença válida.',
]);

Recomendado no __construct do controller. Hash inválido pode bloquear o site até remover o plugin.


Produção

  • APP_DEBUG / system.debug desligado
  • php mucrm cache:compile
  • HTTPS obrigatório para Bearer
  • Rate limit no login e endpoints de economia
  • Backups + schemas versionados
  • ionCube e PHP 8.3+ atualizados