Slack, Teams & Webhooks
Anleitungen
Benachrichtigungen an Slack, Teams und Webhooks
Senden Sie Scanverra-Benachrichtigungen an einen Slack-Kanal, einen Microsoft-Teams-Kanal oder Ihren eigenen HTTPS-Endpunkt, damit Ihr Team von einem Punkteverlust oder einer riskanten Änderung dort erfährt, wo es ohnehin arbeitet.
So funktioniert es
- 1Öffnen Sie Team, dann Integrationen, und fügen Sie Slack, Microsoft Teams oder einen Webhook hinzu.
- 2Wählen Sie die Benachrichtigungen aus, die ankommen sollen, und klicken Sie auf Test senden, um zu prüfen, ob die Nachricht ankommt.
- 3Sobald ein geplanter Scan oder eine Überwachung etwas findet, sendet Scanverra die Benachrichtigung direkt nach Abschluss des Laufs.
Scans, die jemand von Hand startet, senden keine Benachrichtigungen. Planen Sie die Websites und Repositories, die überwacht werden sollen, auf der Seite Geplante Scans.
Verfügbare Benachrichtigungen
Jede Integration erhält nur die Benachrichtigungen, die Sie auswählen. Bei einem Webhook steht der Ereignisname im Header X-Scanverra-Event und im Feld event.
| Ereignis | Wird gesendet, wenn |
|---|---|
scan.score_dropped | Ein geplanter Scan mehr als 10 Punkte unter seinem vorherigen Lauf liegt. Die Benachrichtigung listet auf, was neu ist. |
scan.completed | Ein geplanter Scan mit einem Ergebnis abschließt. |
scan.policy_failedEnterprise | Ein geplanter Scan Ihre Team-Richtlinie nicht erfüllt (Mindestpunktzahl oder keine kritischen Befunde). Die Benachrichtigung nennt die Gründe. |
payment_page.scripts_changedEnterprise | Eine überwachte Zahlungsseite ein neues oder geändertes Skript lädt oder sich ihre Content-Security-Policy ändert. |
attack_surface.changedEnterprise | Eine überwachte Domain einen neuen Host erhält oder ein Host übernommen werden könnte. |
test | Jemand auf Test senden klickt. |
Slack verbinden
- 1Öffnen Sie in Slack Apps, suchen Sie Incoming Webhooks und fügen Sie es dem Kanal hinzu, der die Benachrichtigungen erhalten soll.
- 2Kopieren Sie die Webhook-URL. Sie beginnt mit https://hooks.slack.com/.
- 3Fügen Sie in Scanverra eine Integration hinzu, wählen Sie Slack, fügen Sie die URL ein und wählen Sie Ihre Benachrichtigungen.
Jede Benachrichtigung zeigt die Überschrift, bis zu fünf neue Probleme und eine Schaltfläche „Open report“.
Microsoft Teams verbinden
- 1Öffnen Sie im Teams-Kanal Workflows und wählen Sie In einem Kanal posten, wenn eine Webhook-Anforderung empfangen wird.
- 2Schließen Sie den Workflow ab und kopieren Sie die angezeigte URL.
- 3Fügen Sie in Scanverra eine Integration hinzu, wählen Sie Microsoft Teams, fügen Sie die URL ein und wählen Sie Ihre Benachrichtigungen.
Jede Benachrichtigung kommt als Karte mit Überschrift, den neuen Problemen und einer Schaltfläche „Open report“.
Webhooks
Mit einem Webhook senden Sie Benachrichtigungen überallhin: ein Ticket eröffnen, die Bereitschaft alarmieren oder sie speichern. Scanverra sendet pro Benachrichtigung einen HTTPS-POST mit JSON-Inhalt.
Request-Header
Content-Type | Immer application/json. |
User-Agent | Weist Scanverra als Absender aus.Scanverra-Alerts/1.0 |
X-Scanverra-Event | Der Ereignisname, identisch mit dem Feld event im Inhalt.scan.score_dropped |
X-Scanverra-Timestamp | Zeitpunkt der Signierung, in Unix-Sekunden.1762594212 |
X-Scanverra-Signature | sha256= gefolgt vom HMAC-SHA256 aus Zeitstempel, einem Punkt und dem unveränderten Inhalt, mit Ihrem Signaturgeheimnis als Schlüssel.sha256=9f2c… |
Request-Inhalt
Ein Beispiel für einen Punkteverlust:
{
"event": "scan.score_dropped",
"sentAt": "2026-11-08T09:30:12.418Z",
"summary": "Security Scan score dropped from 81 to 62 for shop.example.com",
"data": {
"target": "https://shop.example.com",
"scanType": "security",
"score": 62,
"prevScore": 81,
"reportUrl": "https://www.scanverra.com/security-scan/cm9x2k1",
"newIssues": [
"Missing Content-Security-Policy header",
"jQuery 3.4.1 has known vulnerabilities"
]
}
}Felder
event | Der Ereignisname. |
sentAt | Wann die Benachrichtigung gesendet wurde (ISO 8601). |
summary | Eine einzeilige Beschreibung, die Sie direkt anzeigen können. |
data.target | Die gescannte URL, die Domain oder owner/repo bei einem Repository. |
data.scanType | audit, seo, security, browser, repo oder crawl (ein SEO-Crawl über mehrere Seiten). |
data.score | Die neue Punktzahl von 0 bis 100, oder null, wenn die Benachrichtigung keine Punktzahl hat (Überwachungen und Tests). |
data.prevScore | Die Punktzahl des vorherigen Laufs, oder null. |
data.reportUrl | Ein Link zum Bericht oder zur Überwachung. |
data.newIssues | Kurze Zeilen, die beschreiben, was sich geändert hat. Kann leer sein oder fehlen. |
Signatur prüfen
Wenn Sie einen Webhook hinzufügen, zeigt Scanverra sein Signaturgeheimnis (whsec_...) einmalig an. Speichern Sie es auf Ihrem Server und prüfen Sie jede Anfrage, bevor Sie ihr vertrauen:
- 1Lesen Sie den Request-Inhalt genau so, wie er angekommen ist, vor jedem JSON-Parsing.
- 2Berechnen Sie den HMAC-SHA256 aus dem Zeitstempel-Header, einem Punkt und dem unveränderten Inhalt, mit dem Geheimnis als Schlüssel.
- 3Vergleichen Sie ihn in konstanter Zeit mit dem Signatur-Header und lehnen Sie Anfragen ab, deren Zeitstempel älter als 5 Minuten ist.
import crypto from "node:crypto";
import express from "express";
const SECRET = process.env.SCANVERRA_WEBHOOK_SECRET; // whsec_...
const app = express();
// express.raw keeps the exact bytes Scanverra signed.
app.post("/scanverra", express.raw({ type: "application/json" }), (req, res) => {
const timestamp = req.get("X-Scanverra-Timestamp") ?? "";
const signature = req.get("X-Scanverra-Signature") ?? "";
const expected = "sha256=" + crypto
.createHmac("sha256", SECRET)
.update(`${timestamp}.${req.body}`)
.digest("hex");
const fresh = Math.abs(Date.now() / 1000 - Number(timestamp)) <= 300;
const valid = signature.length === expected.length &&
crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
if (!fresh || !valid) return res.sendStatus(401);
const alert = JSON.parse(req.body);
console.log(alert.event, alert.summary);
res.sendStatus(204); // answer fast, do slow work afterwards
});
app.listen(3000);Weil der Zeitstempel mitsigniert wird, kann eine abgefangene Anfrage später nicht erneut abgespielt werden.
Zustellregeln
- Antworten Sie innerhalb von 5 Sekunden mit einem beliebigen 2xx-Status. Erledigen Sie langsame Arbeit nach der Antwort.
- Jede Benachrichtigung wird einmal gesendet und nicht wiederholt. Der Bereich Integrationen zeigt, ob die letzte Zustellung geklappt hat.
- Weiterleitungen werden nicht verfolgt, verwenden Sie also die endgültige URL.
- Es werden nur öffentliche HTTPS-Adressen akzeptiert. Slack-URLs müssen auf hooks.slack.com liegen, Teams-URLs auf webhook.office.com oder Power Automate.
- Die Benachrichtigungen enden für das ganze Team, wenn sein Team- oder Enterprise-Tarif ausläuft.
Bereit zum Verbinden?
Team-Inhaber und Admins fügen eine Integration in einer Minute hinzu. Senden Sie vor der ersten echten Benachrichtigung einen Test.