Skip to content

Threat Scoring

WebDecoy calculates a unified threat score for every detection, providing a single number (0-100) that represents the overall risk level of a visitor or request.

Instead of presenting dozens of individual signals, WebDecoy combines them into one actionable number:

Multiple Signals → Weighted Analysis → Unified Score → Clear Action
Without Unified ScoreWith Unified Score
”Is this IP bad? Is the user agent suspicious? What about missing headers? Are they using automation?""Score: 78 - Block this request”
ScoreRiskColorAction
0-20MINIMAL🟢 GreenAllow
21-40LOW🔵 BlueLog
41-60MEDIUM🟡 YellowMonitor/Challenge
61-80HIGH🟠 OrangeChallenge/Block
81-100CRITICAL🔴 RedBlock

The unified score is calculated from multiple weighted components.

ComponentWeightDescription
Attack Signatures25%Detected attack patterns (SQLi, XSS, etc.)
Honeypot Match20%Decoy/honeypot interaction
IP Reputation15%AbuseIPDB score, threat lists
User Agent15%Bot signatures, anomalies
Header Analysis10%Missing/suspicious headers
Fingerprint10%Browser fingerprint consistency
Behavior5%Behavioral patterns

Detected attack patterns in the request:

PatternScore Contribution
SQL Injection+30-40
XSS (Cross-Site Scripting)+25-35
Command Injection+35-45
Path Traversal+20-30
XXE (XML External Entity)+30-40
LDAP Injection+25-35
NoSQL Injection+25-35

Example:

Request: POST /api/login
Body: {"password": "' OR '1'='1"}
Attack Signature Score: 85
- SQL Injection detected (confidence: high)

Interaction with honeypot resources:

InteractionScore
Decoy link accessed70-90
Hidden form field filled60-80
API honeypot triggered75-95
Multiple honeypots hit90-100

Example:

Decoy: /admin/backup.zip accessed
Honeypot Score: 85

Based on threat intelligence:

SourceData
AbuseIPDBAbuse confidence score
Threat ListsKnown malicious IPs
Hosting DetectionDatacenter/hosting IPs
Proxy/VPNAnonymization services

Example:

IP: 192.168.1.100
AbuseIPDB Score: 45
Is VPN: Yes
Is Hosting: Yes
IP Reputation Score: 60

Examines the browser/bot identifier:

SignalScore Impact
Known bot signature+30-50
Automation tool markers+40-60
Inconsistent UA+20-30
Empty/missing UA+50-70
Suspicious patterns+15-25

Example:

User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1)
BUT: IP not from Google
User Agent Score: 75
- Fake Googlebot detected

Checks HTTP header completeness and consistency:

SignalScore Impact
Missing Accept header+15-20
Missing Accept-Language+10-15
No cookies+5-10
Inconsistent headers+20-30
Suspicious header values+15-25

Example:

Headers present: User-Agent only
Missing: Accept, Accept-Language, Accept-Encoding
Header Score: 55

Browser fingerprint consistency:

SignalScore Impact
Canvas anomaly+20-30
WebGL inconsistency+15-25
Font mismatch+10-15
Timezone/language mismatch+15-20

Behavioral patterns:

SignalScore Impact
Instant form submission+20-30
Linear mouse movement+15-25
No scroll events+10-15
Rate limit exceeded+25-35

Scores are grouped into threat levels for easier interpretation.

🟢 Score: 12
Level: MINIMAL

Meaning:

  • Very low risk
  • Likely legitimate user
  • Normal browsing patterns

Recommended Action:

  • Allow the request
  • No logging needed (unless monitoring all traffic)
🔵 Score: 35
Level: LOW

Meaning:

  • Some suspicious signals
  • Could be a curious user or minor automation
  • Worth monitoring

Recommended Action:

  • Allow the request
  • Log for analysis
  • Monitor for patterns
🟡 Score: 52
Level: MEDIUM

Meaning:

  • Multiple suspicious signals
  • Possible bot or scanner
  • Warrants attention

Recommended Action:

  • Consider challenge (CAPTCHA)
  • Log and alert
  • Review manually if pattern continues
🟠 Score: 73
Level: HIGH

Meaning:

  • Strong indicators of automation or malicious intent
  • Likely a bot or attacker
  • Significant risk

Recommended Action:

  • Challenge or block
  • Alert security team
  • Add to watchlist
🔴 Score: 92
Level: CRITICAL

Meaning:

  • Multiple high-confidence indicators
  • Almost certainly malicious
  • Active attack or aggressive scanning

Recommended Action:

  • Block immediately
  • Alert security team
  • Consider IP blocking
  • Investigate the source

Beyond the score, detections are categorized by threat type.

CategoryDescriptionTypical Score
BotAutomated software40-80
AttackerActive exploitation attempt70-100
ScannerVulnerability scanning50-80
CrawlerContent scraping30-60
ScraperData extraction40-70
LegitimateVerified good actor0-20
UnknownInsufficient data20-40

Categories are assigned based on:

  1. Behavior patterns - What actions are they taking?
  2. Target resources - What are they accessing?
  3. Attack signatures - Are they attempting exploits?
  4. Historical data - What have they done before?

Known legitimate bots are categorized separately:

Bot TypeExamplesTreatment
Search EnginesGooglebot, BingbotAllow, low score
Social MediaFacebook, TwitterAllow, low score
MonitoringPingdom, UptimeRobotAllow, low score

WebDecoy provides a detailed breakdown of how scores are calculated.

  1. Open a detection’s detail panel
  2. Click on the threat score number
  3. The score explanation dialog opens
┌─────────────────────────────────────┐
│ Score Breakdown │
├─────────────────────────────────────┤
│ Final Score: 78 │
│ Threat Level: HIGH │
├─────────────────────────────────────┤
│ Components: │
│ ├── Attack Signatures: 85 (25%) │
│ ├── Honeypot Match: 80 (20%) │
│ ├── IP Reputation: 60 (15%) │
│ ├── User Agent: 75 (15%) │
│ ├── Headers: 55 (10%) │
│ ├── Fingerprint: 40 (10%) │
│ └── Behavior: 30 (5%) │
├─────────────────────────────────────┤
│ Key Signals: │
│ • SQL Injection detected │
│ • Decoy link accessed │
│ • Missing Accept-Language header │
│ • IP reported 12 times on AbuseIPDB │
└─────────────────────────────────────┘

Each signal shows:

  • Type: What was detected
  • Confidence: How certain (high/medium/low)
  • Contribution: Impact on final score
  • Evidence: Specific data that triggered it

Use CaseRecommended Threshold
High-security (financial)60
Standard websites75
Public content85
Monitoring only100 (no blocking)
// Example decision logic
if (score >= 80) {
blockRequest();
alertSecurityTeam();
} else if (score >= 60) {
challengeWithCaptcha();
logAsHighRisk();
} else if (score >= 40) {
logForReview();
} else {
allowRequest();
}

If you’re seeing too many false positives:

  1. Increase your block threshold (e.g., 75 → 85)
  2. Add legitimate bots to allowlist
  3. Review high-scoring detections manually

If you’re missing threats:

  1. Lower your block threshold (e.g., 75 → 65)
  2. Enable more detection features
  3. Add stricter rules for sensitive endpoints