Notifications
Lorsque audit:verify --notify détecte une défaillance d'intégrité de la chaîne, AuditChain envoie des alertes via vos canaux configurés. Cela garantit que votre équipe de sécurité est informée immédiatement, qu'elle surveille les e-mails, Slack, Microsoft Teams ou Discord.
Configuration
Configurez les canaux de notification dans config/audit-chain.php :
'notifications' => [ 'channels' => ['mail', 'webhook'], 'mail_to' => [env('AUDIT_ALERT_EMAIL', '')], 'webhooks' => [ env('AUDIT_ALERT_WEBHOOK_1'), ], ],
| Clé | Défaut | Description |
|---|---|---|
channels |
['mail'] |
Canaux à utiliser : mail, webhook, ou les deux |
mail_to |
[] |
Adresses e-mail pour les alertes par courrier |
webhooks |
[] |
URLs de webhook pour Slack, Teams, Discord ou des endpoints personnalisés |
Déclenchement des notifications
Les notifications ne sont envoyées que lorsque vous passez le flag --notify à la commande de vérification :
php artisan audit:verify --notify
Si la chaîne est valide, rien n'est envoyé. Les notifications ne se déclenchent qu'en cas d'échec.
Notifications par e-mail
AuditChain utilise le système de notifications de Laravel avec la classe de notification ChainCompromised. La méthode via() de cette notification retourne ['mail'] de manière fixe — les webhooks sont envoyés séparément via des requêtes HTTP directes et non via le système de canaux de notification de Laravel. L'e-mail inclut :
- Le nombre d'erreurs détectées et de journaux vérifiés
- Une description de ce que la défaillance peut indiquer (falsification, suppression non autorisée ou corruption de la base de données)
- Les 10 premiers détails d'erreur avec les identifiants des journaux d'audit
- Un appel à l'action pour une investigation immédiate
Mise en place
Ajoutez votre adresse e-mail d'alerte dans .env :
AUDIT_ALERT_EMAIL=security@yourcompany.com
Pour plusieurs destinataires, ajoutez-les directement dans la configuration :
'notifications' => [ 'channels' => ['mail'], 'mail_to' => [ 'security@yourcompany.com', 'cto@yourcompany.com', 'compliance@yourcompany.com', ], ],
Assurez-vous que la configuration mail de votre application est correctement configurée — AuditChain utilise le même transport de courrier que le reste de votre application Laravel.
Notifications par webhook
Les payloads de webhook sont conçus pour la compatibilité multiplateforme. Chaque payload inclut les clés text et content, couvrant les formats attendus par Slack, Microsoft Teams et Discord.
Format du payload
{ "text": "[MyApp] AUDIT CHAIN COMPROMISED\n\n3 error(s) detected out of 1500 log(s) checked.\n\n- [01jk...] Chain break: prev_hash does not match expected value.\n- [01jk...] Hash mismatch: stored hash does not match computed hash.\n- [01jk...] Hash mismatch: stored hash does not match computed hash.\n\nImmediate investigation required.", "content": "[MyApp] AUDIT CHAIN COMPROMISED\n\n3 error(s) detected out of 1500 log(s) checked.\n\n- [01jk...] Chain break: prev_hash does not match expected value.\n- [01jk...] Hash mismatch: stored hash does not match computed hash.\n- [01jk...] Hash mismatch: stored hash does not match computed hash.\n\nImmediate investigation required." }
La clé text est utilisée par Slack et Microsoft Teams. La clé content est utilisée par Discord. Les deux contiennent le même message. S'il y a plus de 5 erreurs, le payload affiche les 5 premières et résume le reste.
Slack
Créez un Incoming Webhook dans votre espace de travail Slack et ajoutez l'URL dans votre .env :
AUDIT_ALERT_WEBHOOK_1=https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
Microsoft Teams
Créez un connecteur Incoming Webhook dans votre canal Teams :
AUDIT_ALERT_WEBHOOK_1=https://outlook.office.com/webhook/...
Discord
Créez un webhook dans les paramètres de votre canal Discord (Intégrations > Webhooks). Ajoutez /slack à la fin de l'URL pour utiliser le formatage compatible Slack :
AUDIT_ALERT_WEBHOOK_1=https://discord.com/api/webhooks/000000000000000000/XXXXXXXXXXXX/slack
Webhooks multiples
Vous pouvez envoyer à plusieurs plateformes simultanément :
'notifications' => [ 'channels' => ['mail', 'webhook'], 'mail_to' => [env('AUDIT_ALERT_EMAIL', '')], 'webhooks' => [ env('AUDIT_ALERT_SLACK_WEBHOOK'), env('AUDIT_ALERT_TEAMS_WEBHOOK'), env('AUDIT_ALERT_DISCORD_WEBHOOK'), ], ],
Endpoints personnalisés
Tout endpoint HTTP qui accepte une requête POST JSON fonctionne comme cible de webhook. Le payload est envoyé tel quel — analysez le champ text dans votre application réceptrice.
Sécurité et fiabilité
La livraison des webhooks inclut plusieurs mesures de sécurité :
- Protection SSRF : Les URLs de webhook doivent utiliser HTTPS. Les plages d'adresses IP privées et réservées sont bloquées — le hostname de l'URL est résolu via
gethostbyname()et validé avecFILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGEpour prévenir les attaques Server-Side Request Forgery. - Gestion des erreurs : La livraison des webhooks est enveloppée dans un try-catch. Si une requête webhook échoue (erreur réseau, timeout, réponse non-2xx), un avertissement est journalisé au lieu de faire planter la commande de vérification.
- Timeout HTTP : Toutes les requêtes webhook utilisent
Http::timeout(10)pour éviter de rester bloqué indéfiniment sur des endpoints qui ne répondent pas.
Surveillance automatisée
Pour une surveillance continue, planifiez la vérification avec le flag --notify :
// routes/console.php Schedule::command('audit:verify --notify')->hourly();
Consultez Planification pour la configuration cron complète recommandée.