Practical Lens 69

Practical Lens 69: A crawler name is not proof of identity

The request says GPTBot. The source cannot be verified. The target is /.env. Treating a copied label as trusted identity can turn an access rule into a security gap.

Published 15 Sep 2026 · Updated 15 Sep 2026

AI crawler verificationbot impersonationwebsite security

Board-level signal

A familiar crawler name can make traffic look safe in a dashboard or firewall rule. If the requester is not verified, the business can grant trusted access to an impersonator, misclassify security probes as AI demand, or overreact by blocking legitimate discovery.

What this lens means

Lens 37 asks whether bot protection blocks legitimate AI access. Lens 57 asks who owns crawler policy. Lens 69 asks a different question: does the incoming request actually belong to the provider named in its User-Agent? The name is only a claim until independent evidence supports it.

Claimed identity

The crawler name supplied in the HTTP User-Agent, such as GPTBot, OAI-SearchBot or ClaudeBot. Any HTTP client can copy this text.

Verified identity

A requester whose claimed provider is supported by a trusted verified-bot signal, provider-published network ranges, confirmed DNS evidence or a valid request signature.

Key terms

User-Agent
A request header that declares the client’s name. It is useful for classification but does not authenticate the sender.
Provider verification
Independent evidence that connects the request source to the provider it claims to represent.
Sensitive path
A route commonly associated with credentials, configuration, source code or administrative interfaces.
Identity confidence
A documented result such as verified, unverified or inconclusive, based on the evidence available at request time.

Why this happens

User-Agent strings are simple to copy, while many dashboards and rules classify bots by name alone. A request can therefore inherit a trusted label without inheriting the provider’s network, DNS or cryptographic identity.

What this usually indicates

  • A firewall allowlist matches only the User-Agent.
  • Analytics report named bots without a verification field.
  • Unverified and verified crawler traffic is combined.
  • Sensitive-path requests are counted as ordinary crawling.
  • Exceptions are granted by crawler name across every route.
  • No owner reviews changes to provider verification evidence.

What to verify (evidence-only)

  1. Inventory trusted crawler rules. Find every allow, bypass and analytics rule based on a bot name.
  2. Add independent evidence. Use a trusted verified-bot signal, current provider IP ranges, confirmed DNS or request signatures where supported.
  3. Separate confidence classes. Record verified, unverified and inconclusive requests separately.
  4. Classify the target. Treat credential, configuration, source and administrative paths as security events, not content discovery.
  5. Retest exceptions. Confirm that legitimate verified crawlers can reach intended public pages without receiving access to sensitive routes.

Crawler identity register

Use one row for each crawler rule or observed traffic class. Enter allow only when the requester is verified and the route is intentionally public.

claimed_bot,verification_method,verification_result,path_class,action,owner,checked_at
[name],[verified bot/IP/DNS/signature],[verified/unverified/inconclusive],[public/sensitive],[allow/challenge/block],[role],[date]

Terminal check: find unsafe crawler decisions

Open Terminal in the folder containing crawler-identity-check.csv, paste the command and press Enter. The expected result is every unverified request that is allowed or sensitive-path request that is not blocked.

python3 -c 'import csv,sys; r=list(csv.DictReader(open(sys.argv[1],encoding="utf-8-sig"))); bad=[x for x in r if (x["verification_result"].strip().lower()!="verified" and x["action"].strip().lower()=="allow") or (x["path_class"].strip().lower()=="sensitive" and x["action"].strip().lower()!="block")]; [print("{} | {} | {} | owner: {}".format(x["claimed_bot"],x["verification_result"],x["action"],x["owner"])) for x in bad]; print("Unsafe crawler decisions: {}/{}".format(len(bad),len(r)))' crawler-identity-check.csv

Business meaning: every listed row can create unmeasured security exposure or false AI-traffic reporting.

PowerShell check: find unsafe crawler decisions

Open PowerShell in the folder containing the same CSV, paste the commands and press Enter. The expected result is the same list and count.

$rows = Import-Csv .\crawler-identity-check.csv
$issues = $rows | Where-Object { ($_.verification_result -ne 'verified' -and $_.action -eq 'allow') -or ($_.path_class -eq 'sensitive' -and $_.action -ne 'block') }
$issues | Format-Table claimed_bot,verification_result,path_class,action,owner -AutoSize
'Unsafe crawler decisions: {0}/{1}' -f $issues.Count,$rows.Count

Business meaning: review the identity evidence and route policy before keeping any listed exception.

Decision rule for CXOs

Do not grant trusted access because a request uses a familiar AI crawler name. Require independent provider evidence, keep sensitive routes protected, and report verified crawlers separately from unverified claims. Verification reduces a false choice between security and legitimate AI discoverability; it does not prove benign behaviour on every request.

Evidence boundary

VerisAI’s Threat Note 01 observed 12,948 requests carrying recognised AI-crawler names over 90 days. Of those, 10,064 could not be tied to the claimed provider by the available evidence, and 4,355 unverified requests targeted sensitive technical paths; representative live checks found no leak. Cloudflare documents verified-bot identity through methods including public IP lists, reverse DNS and cryptographic Web Bot Auth. Google likewise warns that User-Agent strings can be spoofed and documents IP and DNS verification. These sources support verification as a control; an unverified request is not automatically malicious.

Frequently Asked Questions

Why is a crawler User-Agent not enough to prove identity?

A User-Agent is text supplied by the requester and can be copied. It identifies a claim, not the organisation that sent the request.

What can verify a crawler identity?

Useful evidence can include a trusted verified-bot signal, a match to provider-published IP ranges, confirmed forward and reverse DNS, or a valid cryptographic request signature where supported.

Is every unverified AI-labelled request malicious?

No. Unverified means the available evidence did not establish the claimed provider. Behaviour, requested paths and rate still need separate assessment.

Should every unverified crawler be blocked?

Not automatically. Access decisions should combine identity confidence, route sensitivity, behaviour and the organisation’s crawler policy. Legitimate AI discovery should remain intentional.

Verify the requester before trusting the name.

Founded in 2025, VerisAI helps teams separate legitimate AI discovery from unverified crawler claims.