Download the PHP package allyson/laravel-safe-mode without Composer
On this page you can find all versions of the php package allyson/laravel-safe-mode. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download allyson/laravel-safe-mode
More information about allyson/laravel-safe-mode
Files in allyson/laravel-safe-mode
Package laravel-safe-mode
Short Description Protege ambientes Laravel contra comandos Artisan destrutivos em produção, com auditoria completa.
License MIT
Informations about the package laravel-safe-mode
allyson/laravel-safe-mode
Protege ambientes Laravel contra execução acidental de comandos Artisan destrutivos em produção — com auditoria completa, notificações e whitelist de IPs.
O problema que essa lib resolve
Isso já aconteceu em empresas grandes. O SafeMode impede.
Como funciona
Em ambos os casos com host remoto, o banco de auditoria precisa estar disponível. Se não estiver, o comando é bloqueado incondicionalmente.
Instalação
O Service Provider é registrado automaticamente via Laravel Package Auto-Discovery.
Configuração inicial
O assistente irá:
- Publicar
config/safe-mode.php - Publicar as migrations
- Perguntar qual conexão usará para salvar as auditorias
- Atualizar o
.envautomaticamente - Executar as migrations (opcional)
Variáveis de ambiente
| Variável | Padrão | Descrição |
|---|---|---|
SAFE_MODE |
true |
true = bloqueia em servidor remoto | false = audita sem bloquear |
SAFE_MODE_AUDIT_CONNECTION |
(vazio) | Nome da conexão do banco de auditoria |
SAFE_MODE_FORCE_PRODUCTION |
true |
Força safe mode quando APP_ENV=production |
SAFE_MODE_ALLOWED_IPS |
(vazio) | IPs adicionais considerados locais (separados por vírgula) |
SAFE_MODE_WEBHOOK_ENABLED |
false |
Habilita notificações via webhook |
SAFE_MODE_WEBHOOK_CHANNEL |
generic |
Canal: slack, discord ou generic |
SAFE_MODE_WEBHOOK_URL |
(vazio) | URL do webhook |
Exemplo de .env:
Configuração (config/safe-mode.php)
Tabela de auditoria (safe_mode_audits)
| Campo | Tipo | Descrição |
|---|---|---|
id |
bigint | Chave primária |
command |
string | Comando executado (ex: migrate:fresh) |
user |
string | Usuário do SO (PHP process) |
machine |
string | Hostname da máquina |
ip |
string | IP da máquina |
database_host |
string | Host do banco alvo |
connection |
string | Nome da conexão Laravel |
app_env |
string | APP_ENV no momento |
output |
longtext | Saída do comando (quando capturada) |
exit_code |
integer | Código de saída |
blocked |
boolean | true = bloqueado, false = auditado |
created_at |
timestamp | Data/hora do registro |
Detecção de host local
O LocalIpDetector considera local:
127.0.0.1,localhost,::1,0.0.0.0- Redes
10.x.x.x(RFC 1918) - Redes
192.168.x.x(RFC 1918) - Redes
172.16.x.xa172.31.x.x(RFC 1918) 169.254.x.x(link-local)- Hostnames que resolvem para um dos IPs acima
- IPs adicionais configurados em
SAFE_MODE_ALLOWED_IPS - Conexões SQLite (sempre locais)
Adicionar comandos à lista de proteção
Notificações via Webhook
Slack
Discord
HTTP Genérico (JSON)
Payload enviado:
Estrutura do pacote
Requisitos
- PHP 8.5+
- Laravel 12.x
Licença
MIT — veja LICENSE.
Estrutura final
Decisões de design implementadas
| Requisito | Implementação |
|---|---|
| Bloquear migrate:fresh etc. em host remoto | SafeModeService via CommandStarting event |
| SAFE_MODE=false audita sem bloquear | Fluxo no SafeModeService.handle() |
| Banco de auditoria obrigatório | ConnectionInspector.assertAuditConnectionAvailable() — sem banco, bloqueia sempre |
| safe-mode:install interativo | InstallCommand com seleção de conexão, testes, atualização do .env |
| Forçar safe mode em APP_ENV=production | force_on_production na config |
| Whitelist de IPs extras | SAFE_MODE_ALLOWED_IPS + LocalIpDetector.isWhitelisted() |
| Notificações webhook | WebhookNotifier para Slack, Discord e HTTP genérico |
| SQLite sempre local | ConnectionInspector verifica driver antes do host |
| blocked vs audited separados | Campo blocked boolean na tabela + método registerBlocked() |
All versions of laravel-safe-mode with dependencies
illuminate/support Version ^12.0
illuminate/console Version ^12.0
illuminate/database Version ^12.0
illuminate/events Version ^12.0
illuminate/http Version ^12.0