Dhal kombiniert deterministische Kontrollen mit routenspezifischer Policy. Beginnen Sie mit Monitoring und aktivieren Sie Blockierung dort, wo das Anwendungsverhalten bekannt ist.
Enthaltene Kontrollen
- IP-Allow- und Blocklisten;
- SQLi-, XSS-, Path-Traversal-, SSRF-, RCE-, SSTI-, GraphQL- und Probe-Signaturen;
- Request-Größe;
- Header- und Content-Type-Anomalien;
- positive JSON-API-Sicherheit;
- Bots und Automatisierung;
- Honeypots;
- Credential Stuffing;
- Rate Limits und IP-Reputation.
Regelpakete
generic-web, api, auth, wordpress und strict-api.
{
"rules": {
"packs": ["generic-web", "api"],
"sqli": true,
"xss": true,
"pathTraversal": true
}
}Prüfen Sie den Katalog mit npx dhal rules.
Routenprofile
{
"mode": "monitor",
"routes": {
"/api/login": {
"mode": "block",
"tags": ["authentication"],
"rateLimit": {
"enabled": true,
"windowSeconds": 60,
"max": 20,
"keyBy": ["ip", "route"]
},
"rules": {
"credentialStuffing": {
"enabled": true,
"windowSeconds": 300,
"maxFailures": 4,
"keyBy": ["ip", "route", "userAgent"]
}
}
}
}
}Muster unterstützen exakte Pfade und *-Wildcards. Bei mehreren Treffern gewinnt das spezifischste Muster anhand seiner Länge ohne Wildcards.
{
"routes": {
"/api/admin/*": { "mode": "strict" },
"/api/public/*": { "mode": "monitor" }
}
}Fehlalarme
Passen Sie für Bots zuerst scoreThreshold, minSignals, allowUserAgents, skipStaticAssets und ignorePaths an, bevor Sie die Kontrolle global deaktivieren.
Aktivieren Sie rules.api global nur für reine JSON-Dienste, sonst pro Route.
Suppressions
{
"policy": {
"suppressions": [
{
"id": "interner-scanner",
"enabled": true,
"ruleId": "honeypot.triggered",
"path": "/.well-known/security-canary",
"reason": "genehmigter interner Scanner",
"expiresAt": "2027-01-01T00:00:00.000Z"
}
]
}
}Suppressions bleiben in Audit-Metadaten sichtbar. Halten Sie sie eng, begründet und befristet.