Skip to content

Decoy Links

A decoy link (also called a honeypot link) is a hidden URL that legitimate users will never access. When someone does access it, you know immediately that they’re scanning, crawling, or attacking your site.

Your Website
├── /index.html ← Visible to users
├── /about.html ← Visible to users
├── /contact.html ← Visible to users
└── /admin-backup.zip ← DECOY (hidden, only bots find it)
Bot accesses decoy
Detection created
Alert/Block action
  • Automated scanners crawl every link they find
  • Vulnerability tools probe common paths like /admin, /backup
  • Scrapers follow all links, including hidden ones
  • Reconnaissance maps your entire site structure
Traditional SecurityDeception Security
Tries to block known attacksDetects unknown attackers
Relies on signaturesCatches by behavior
High false positive rateZero false positives (only bots trigger decoys)
Attackers can evadeAttackers don’t know what’s a trap

  1. Navigate to Decoys

    • Click Decoys in the sidebar
  2. Click “New Decoy”

    • The create decoy dialog opens
  3. Configure the Decoy

    FieldDescriptionExample
    NameInternal name for identification”Admin Backup Trap”
    DomainCustom domain to usedecoy.yoursite.com
    PathURL path for the decoy/admin/backup.zip
    Trigger ActionWhat happens when accessedLog, Block, etc.
  4. Click “Create”

    • Your decoy is created and active immediately
  5. Deploy the Decoy

    • Add a hidden link to your website pointing to the decoy URL
    • See Deploying Decoy Links for deployment methods

Your decoy URL is constructed as:

https://{domain}{path}

Example:

  • Domain: decoy.yoursite.com
  • Path: /admin/backup.zip
  • Full URL: https://decoy.yoursite.com/admin/backup.zip

When someone accesses a decoy, WebDecoy can respond in different ways.

ActionBehaviorBest For
LogRecord the access, return 200 OKMonitoring, intelligence gathering
BlockRecord and return 403 ForbiddenActive defense, deterrence
PoisonReturn fake/misleading dataWasting attacker time
RedirectRedirect to another URLDirecting to legal notices

The default action. Records the detection and returns a normal-looking response.

Response:

  • HTTP 200 OK
  • Generic or customized content

Use when:

  • You want to monitor without tipping off attackers
  • Gathering intelligence on attack patterns
  • Running decoys in observation mode

Records the detection and returns an access denied response.

Response:

  • HTTP 403 Forbidden
  • Access denied message

Use when:

  • You want to actively deter attackers
  • Combined with integration blocking (Cloudflare, WAF)
  • Sending a clear “you’re caught” message

Returns fake data designed to waste attacker time or mislead them.

Response:

  • HTTP 200 OK
  • Fake credentials, dummy data, or misleading information

Examples:

  • Fake database dumps with invalid data
  • Honeypot credentials that trigger alerts
  • Large files that waste bandwidth

Use when:

  • You want to actively mislead attackers
  • Wasting attacker resources
  • Creating uncertainty about what’s real

Redirects the request to another URL.

Response:

  • HTTP 302 Redirect
  • Redirects to configured URL

Use when:

  • Directing to a legal warning page
  • Sending to a law enforcement reporting portal
  • Redirecting to a CAPTCHA challenge

Set a maximum number of times a decoy can be triggered:

SettingBehavior
No limit (default)Decoy remains active indefinitely
Click limit: 100Decoy deactivates after 100 triggers

Use when:

  • Running time-limited campaigns
  • Preventing excessive log data
  • Testing specific scenarios

Set when a decoy should automatically deactivate:

SettingBehavior
No expiration (default)Decoy remains active indefinitely
Expires: 2025-06-01Decoy deactivates on that date

Use when:

  • Temporary honeypots for specific campaigns
  • Compliance requirements
  • Rotating decoy strategies

Add internal notes about the decoy:

Description: "Placed in robots.txt disallow section to catch bots
that ignore robots.txt rules. Monitoring campaign started 2025-01."

Use for:

  • Documenting the decoy’s purpose
  • Tracking which campaign it belongs to
  • Notes for team members

When using the “Poison” action, specify what fake data to return:

{
"users": [
{"email": "admin@fake.com", "password": "honeypot123"},
{"email": "root@fake.com", "password": "canary456"}
]
}

Tips:

  • Make it look realistic
  • Include obvious honeypot markers for tracking
  • Don’t include real data

Decoys only work if attackers can find them. Here are methods to deploy decoy links.

Add an invisible link to your website:

<!-- Hidden decoy link - invisible to users, visible to bots -->
<a href="https://decoy.yoursite.com/admin/backup.zip"
style="display:none; visibility:hidden; position:absolute; left:-9999px;">
Admin Backup
</a>

Where to place:

  • Footer of every page
  • Inside a hidden <div>
  • In the <head> section as a <link> tag

Add decoys to robots.txt with “Disallow” - malicious bots often target these paths:

robots.txt
User-agent: *
Disallow: /admin/
Disallow: /backup/
Disallow: /admin/backup.zip # This is actually a decoy!

Why this works:

  • Legitimate bots respect robots.txt
  • Malicious bots specifically target disallowed paths
  • Creates a perfect trap

Embed decoy URLs in HTML comments:

<!--
TODO: Remove before production
Backup location: https://decoy.yoursite.com/db_backup_2024.sql
-->

Why this works:

  • Attackers often search source code for sensitive paths
  • Comments look like developer mistakes
  • Very convincing to automated scanners

Hide decoy URLs in JavaScript:

// Configuration - do not modify
var config = {
apiEndpoint: "/api/v1",
adminPath: "https://decoy.yoursite.com/admin/debug", // Decoy!
backupUrl: "https://decoy.yoursite.com/backup.tar.gz" // Decoy!
};

Create a fake sitemap with decoy URLs:

honeypot-sitemap.xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://decoy.yoursite.com/admin/config.php</loc>
</url>
<url>
<loc>https://decoy.yoursite.com/backup/database.sql</loc>
</url>
</urlset>

These paths are commonly targeted by attackers:

CategoryExample Paths
Admin/admin, /administrator, /wp-admin, /admin.php
Backup/backup.zip, /backup.sql, /db_backup.tar.gz
Config/config.php, /settings.json, /.env, /wp-config.php
Debug/debug, /phpinfo.php, /test.php, /info.php
API/api/admin, /api/debug, /graphql/admin
Files/passwords.txt, /users.csv, /credentials.json

Navigate to Decoys to see all your decoy links:

ColumnDescription
NameYour internal name for the decoy
StatusActive or Inactive
ActionLog, Block, Poison, or Redirect
ClicksNumber of times triggered
CreatedCreation date
ActionsMenu with edit, delete, copy URL

Filter by Status:

  • All
  • Active only
  • Inactive only

Sort by:

  • Creation date (newest/oldest)
  • Click count (most/least)
  • Name (A-Z, Z-A)

Use the search box to find decoys by:

  • Name
  • Short code
  • Path
  1. Find the decoy in the list
  2. Click the menu (three dots)
  3. Select Copy URL
  4. The full URL is copied to your clipboard

To activate or deactivate a decoy:

  1. Find the decoy in the list
  2. Click the toggle switch in the Status column
  3. The decoy is immediately activated/deactivated
  1. Click the menu (three dots)
  2. Select Edit
  3. Modify the decoy settings
  4. Click Save
  1. Click the menu (three dots)
  2. Select Delete
  3. Confirm the deletion
  4. The decoy is permanently removed

Note: Detections from deleted decoys are preserved for historical records.


  • ✅ Use realistic-looking paths
  • ✅ Deploy multiple decoys across your site
  • ✅ Include decoys in robots.txt (as disallowed)
  • ✅ Rotate decoys periodically
  • ✅ Monitor detection patterns
  • ❌ Use obviously fake names like “honeypot.html”
  • ❌ Place decoys where legitimate users might click
  • ❌ Forget to deploy the link on your actual site
  • ❌ Use the same decoy across all properties
  • ❌ Ignore the detection data

Learn about more advanced honeypots: