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.
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)
- Inventory trusted crawler rules. Find every allow, bypass and analytics rule based on a bot name.
- Add independent evidence. Use a trusted verified-bot signal, current provider IP ranges, confirmed DNS or request signatures where supported.
- Separate confidence classes. Record verified, unverified and inconclusive requests separately.
- Classify the target. Treat credential, configuration, source and administrative paths as security events, not content discovery.
- 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.csvBusiness 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.CountBusiness 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.
Founded in 2025, VerisAI helps teams separate legitimate AI discovery from unverified crawler claims.