Hosting, VPS & CDN Operators

Which of your customers is serving a phishing kit right now?

Somewhere in a fleet of a few hundred thousand virtual hosts, a handful of document roots are answering requests with a bank login clone. You already hold half the answer — the inventory of every hostname you serve. This page is about the other half: a daily, DNS-verified list of hostnames confirmed to be live phishing infrastructure, and what an abuse desk does with the overlap.

390,000+DNS-verified phishing domains, all currently resolving
24 hBetween full rebuilds, with an added/removed changelog
100Hostnames per batch request, one lookup each
CSVWhole-database pull for fleet-wide sweeps
Shared & reseller hosting
VPS and container tenants
Free-subdomain namespaces
Abuse-desk triage
Netblock reputation
CDN and edge estates
Home / Use Cases / Hosting Providers
How it gets in

Almost none of it arrives as a fresh signup

The phishing content on a mature hosting platform is overwhelmingly parasitic on customers who did nothing wrong except fall behind on updates.

The mental model most people bring to abuse work is the disposable account: an attacker signs up with a stolen card, deploys a kit, gets terminated, signs up again. That does happen, and signup fraud controls are worth having. But on a platform that has been running for a decade it is not where the volume sits. The volume sits on legitimate, paying, long-standing customer sites compromised through an unpatched content-management plugin, a reused FTP password, an administrative account belonging to a developer who left two years ago, or a theme downloaded from somewhere it should not have been. The account has years of billing history and a real human behind it, which is precisely what makes the hostname valuable to an attacker and awkward for you. What follows is the life of one such kit, from the first written file to the case your desk finally closes.

Day zero · route one

A vulnerable component is exploited to write a file

The mechanics are dull and consistent. Something in the stack — a plugin three versions behind, an abandoned theme, an upload handler that never checked what it was handed — is used to place a file on disk. No credential was needed and the customer sees nothing.

Day zero · route two

Or your own control panel hands over the keys

Control-panel credential phishing is a permanent fixture of this industry: a message that appears to come from your brand, warning that a plan is lapsing or a payment failed, linking to a form that reproduces your cPanel, Plesk or client-area login down to the favicon. When that works the attacker needs no exploit at all — they sign in, add an addon domain or a subdomain, and upload through your own file manager. Resellers make this worse, because their customers often have no idea whose infrastructure they are on and therefore no baseline for what a genuine platform notice looks like.

Minutes later

A small uploader lands somewhere nobody looks

Rarely the kit itself. Usually a few kilobytes of uploader in a nested directory under an uploads folder, a path mimicking a well-known metadata directory, or a cache folder that gets recreated on every deploy — chosen precisely because it survives a tidy-up and attracts no attention in a file listing.

Days or weeks later

The kit arrives through the uploader

A handful of PHP files, an HTML clone of a bank or webmail login, a stylesheet and image bundle pulled straight from the imitated brand, and a handler that mails or posts each captured credential set to a drop address. The gap between the uploader and the kit is why filesystem timestamps alone rarely tell the whole story.

The same hour

A cloak goes up alongside it

A .htaccess frequently ships with the kit, configured to return a 404 to anything that looks like a security crawler or an address range belonging to a scanning service. The page renders for a victim arriving from an email link and vanishes for anyone checking afterwards, which is how a report can be entirely genuine and entirely unreproducible.

The lure goes out

Your namespace lends the page its credibility

Free subdomains, staging URLs, preview hostnames and site-builder addresses all hand out a label under a parent domain that has accumulated years of reputation. A phishing page on an unfamiliar new domain has to overcome a reader's suspicion of a strange string; one on a subdomain of a hosting brand that mail filters and browsers have been seeing benign traffic from for years starts several steps ahead of that.

Within 24 hours

The hostname is observed, verified and published

The page has to answer DNS to be worth anything to its operator, and that is the moment it becomes findable by anyone holding a list. It enters the next daily build as a confirmed, currently-resolving phishing hostname — the first point in this whole sequence where you can learn about it from data rather than from a complaint.

Your morning

The intersection turns it into a case, and the case ends in a suspension or a repair

Without that step, this is the stage where a brand-protection vendor, a bank's takedown team or a customer forwarding a screenshot tells you instead — and free-subdomain namespaces are exactly where hosts most often learn about the problem from outside rather than from anything running inside their own estate.

Blast radius

Five things that break before you hear about the kit

Hosted phishing is rarely contained to the account hosting it, which is why the discovery lag is the expensive part rather than the takedown.

Shared outbound mail

A compromised account that starts pushing lure mail through your shared relay puts that relay's reputation at risk for every tenant on it. The first symptom is usually a support queue full of unrelated customers reporting that their invoices are landing in spam.

Netblock listings

Blocklist operators frequently act on the address rather than the hostname. One kit on a shared IP can put hundreds of unrelated vhosts behind a warning interstitial or a mail rejection, and delisting is a queue you join rather than a switch you flip.

Abuse-desk backlog

Reports arrive from brand-protection vendors, bank takedown teams, automated pipelines and members of the public. A large share are duplicates or already dead. Sorting the live ones by hand is what turns a two-hour response target into a two-day one.

The wrong suspension

Suspending a whole account on a bad report takes a working business offline and produces a chargeback, a public complaint and a retention problem. Not suspending a real one leaves you hosting active credential theft. Both errors are expensive, in different currencies.

The record of what you knew

Notice-and-takedown regimes turn on whether you acted promptly once aware. An abuse process whose only evidence is a mailbox thread is a weak record. A dated, machine-generated case carrying the source of the finding is a strong one.

The common factor is time-to-knowledge, not time-to-action

Ask most abuse teams where their hours go and they describe triage, not remediation. Once a case is confirmed, quarantining a document root or nulling a vhost takes minutes. The cost sits upstream of that: establishing whether a reported hostname is genuinely serving phishing right now, whether the report is a week stale, which account owns the vhost, and whether the customer is a victim or the operator. A list of hostnames already verified as resolving does not remove those judgement calls, but it collapses the first of them from an investigation into a lookup — and it lets you ask the question about the whole fleet at once, rather than only about the hostnames somebody happened to report.

The core operation

Join your hostname inventory against the daily build

You are the only party who knows every hostname your fleet answers for. That inventory is the asset; the feed is simply the second column.

Every hosting platform can produce, with some effort, a flat list of every hostname it serves: primary domains, addon domains, parked aliases, every label under a free-subdomain namespace, every CDN property, every staging and preview host. That export is the thing nobody outside your organisation has. The database behind this API is the complement: hostnames confirmed, within the last twenty-four hours, to be resolving in DNS and serving phishing. Neither list is interesting alone. The intersection is an operations queue — the specific set of your customers who are, at this moment, hosting credential theft.

Why the CSV feed rather than four hundred thousand API calls

It is arithmetic. If your fleet is four hundred thousand vhosts and you want to check all of it daily, that is four hundred thousand lookups a day through the batch endpoint at a hundred hostnames per request. The feed inverts the direction of travel: you pull the complete database once, load it into whatever you already use for set membership — a Redis set, a sorted file, an indexed table, a Bloom filter if you are matching in a hot path — and the comparison runs on your own hardware at whatever rate you like. The daily changelog of added and removed domains keeps the update cheap, because after the first load you are applying a delta rather than rebuilding.

Where the per-lookup API earns its place

At the narrow points where you need an answer about one hostname at a decision moment, and there are three of them on a typical platform:

  • An inbound abuse report, verified at the instant it is filed rather than when an analyst reaches it.
  • A newly registered domain pointed at your nameservers, screened as it is provisioned.
  • A support agent about to lift a suspension, checking whether the hostname is still listed before restoring service.

Those are single calls, they return in well under fifty milliseconds, and the plan arithmetic is comfortable: an abuse desk processing three thousand reports a day consumes roughly ninety thousand lookups a month, which the Professional plan covers at $249/month for 100,000 lookups with room to spare.

Sequence the result before anyone opens a ticket

Ordering matters more than teams expect, and three sort keys applied in this order produce a worklist ordered by consequence rather than by the order in which reports happened to arrive:

  • Currently resolving, first. A listed hostname whose DNS has already been pulled is a cleanup job rather than an emergency — the files may still be on disk, but nobody is reaching them.
  • Then exposure. A label under your own free-subdomain namespace outranks a customer's own domain, because that one is spending your reputation rather than theirs.
  • Then account history. An account appearing in the intersection twice in a quarter is a different conversation from one appearing once.
$ curl -s -X POST https://phishingdetectionapi.com/api/v1/batch \
 -H "Content-Type: application/json" \
 -d '{"apikey":"YOUR_KEY",
 "domains":["shop.tenant-4471.example",
 "portal.tenant-9820.example",
 "edge.tenant-1033.example"]}'

# single-hostname verification at the abuse desk
$ curl -s "https://phishingdetectionapi.com/api/v1/check\
?domain=portal.tenant-9820.example&apikey=YOUR_KEY"

{"domain":"portal.tenant-9820.example","is_phishing":true,
 "category":"credential-harvesting","dns_status":"resolving",
 "last_checked":"2026-07-26T04:12:09Z","confidence":"high",
 "database_size":391204}

The batch endpoint accepts up to 100 hostnames per request and charges one credit per hostname. A database-stats endpoint returns the current size and last-update timestamp, which is what your staleness alarm should watch. The key is held server-side and never appears in a customer-facing control-panel page. Full parameter reference on the API documentation page.

On sizing the sweep: most platforms do not need to check every vhost every day. Hostnames with no content change, no control-panel login from a new address and no prior abuse history are low-yield. A daily pass over the free-subdomain namespace, recently modified document roots and accounts with a previous finding, plus a full sweep weekly, captures most of the value for a fraction of the work.
What the list actually is

A daily inventory of hostnames, not a scoring model

Four properties that decide whether this is usable inside an automated abuse pipeline.

390,000+Active phishing domains, every one DNS-verified as currently resolving
24 hFull rebuild cadence, with a changelog of what was added and removed
<50 msTypical single-hostname lookup latency at the decision point
100Hostnames per batch request, one credit consumed per hostname

Dead domains are dropped rather than retained, and that is the property which matters most to an abuse desk. A blocklist that keeps every hostname it has ever seen produces findings you cannot act on and customer relationships you cannot repair. A list containing only hostnames observed resolving today produces a queue where every row is a live problem.

The desk

Triage, ticket, and the suspension decision

The hard part of abuse handling was never the takedown. It is deciding quickly and defensibly which reports deserve one.

An abuse mailbox is a firehose of unequal inputs. Some reports come from organisations with disciplined pipelines and precise evidence. Some come from a member of the public forwarding an email with no URL in it. Some are automated resubmissions of a case you closed last month. The rational response is a triage gate costing almost nothing per item — extract every hostname in the report, check each one, route on the answer:

  • Listed and resolving goes straight into an actionable queue with the verification attached to the case.
  • Unlisted goes to a human, because absence from the list is not a verdict. It means nobody has confirmed that hostname yet, which is a genuinely different statement from "this is clean".

The suspension ladder, decided before you need it

Once a case is actionable, the suspension decision should be a policy your legal and support teams settled in advance, not one an analyst improvises at two in the morning. The narrowest useful action is usually to quarantine the offending path — move the kit out of the document root, leave the rest of the site serving — and open a customer notification carrying the evidence, which preserves a compromised victim's business while removing the harm. Full account suspension makes sense in four situations:

  • The kit is the only thing in the document root.
  • The account is new and the payment instrument is suspect.
  • The same account has appeared in a finding before.
  • The customer does not respond inside the notification window.

Publishing that ladder — quarantine, notify, escalate, suspend — turns an argument into a checklist.

Write the notification to a victim, not to a suspect

Most of the people you are writing to are victims, and a message that opens by accusing a small business of hosting fraud produces a defensive reply and a support escalation. A message stating that a specific file at a specific path is serving a login page imitating a named brand, that the hostname was independently confirmed as live phishing infrastructure on a given date, that the likely cause is a compromise rather than anything the customer did deliberately, and that here are the three things to check first, produces cooperation. Attach four things every time:

  • The hostname exactly as it appeared in the build.
  • The date it was first observed in the feed.
  • The path inside the document root.
  • A file listing with modification timestamps.
The rule that makes the record hold

No case closes without a verification call written onto it

After remediation, re-check the hostname with a single call and record the result before the case closes. This kills the common failure where a customer deletes the visible clone and leaves the uploader that put it there, and it produces a dated, machine-generated record of detection, notification and resolution. If you are ever asked to demonstrate that you acted expeditiously once aware, that record is the answer.

Teams that pair that trail with a broader incident-response workflow and a threat-intelligence pipeline end up with one evidence trail serving three purposes at once.

Deployment

Five steps from an inventory export to an automated case

Nothing here needs an agent on a customer node, and nothing changes how tenants are provisioned.

01

Export the inventory

Every hostname the fleet answers for — primary, addon, parked, subdomain-namespace label, CDN property — with the owning account ID and node beside it.

02

Pull the daily build

An authenticated fetch of the current CSV plus the added and removed changelog, scheduled after the rebuild lands, with an alarm if the file is more than two days old.

03

Intersect locally

Join on the hostname inside your own infrastructure. Keep the rows where the domain is currently resolving; park the rest as lower-priority cleanup work.

04

Raise the case

Open an abuse case against the owning account automatically, carrying the feed row, the date first observed, the vhost path and the templated customer notification.

05

Verify and close

After remediation, re-check the hostname through the check endpoint and write the result onto the case. No verification, no closure — that rule is the whole discipline.

Screening at provisioning is the cheapest control on this page. When a customer points a domain at your nameservers or adds it as an addon domain, that hostname is already a known quantity to somebody. One lookup at that moment costs a fraction of a cent and occasionally stops a kit from ever reaching a document root. Registrars run a similar check further upstream — see phishing detection for domain registrars for the other end of the same chain.
Reputation

Your address space is a shared asset with no undo button

The customers who pay for a kit you did not find quickly are almost never the customer who was hosting it.

Shared infrastructure means shared consequences. When a phishing page is served from an address that also serves four hundred unrelated sites, the parties who act on it — mail receivers, browser safe-browsing systems, corporate DNS filters, security appliances — frequently act at the granularity of the address or the enclosing range rather than the hostname. That is not carelessness on their part; from outside, an IP that has served two kits this month is a defensible unit of risk. But the effect inside your platform is that a compromise on one small customer's blog degrades mail deliverability and browser trust for every neighbour on the node, none of whom did anything and all of whom will open a ticket.

Getting off a list is slower than getting on one

Delisting is not a switch. It is a sequence you only partly control:

  • Demonstrate that the content is gone, to the satisfaction of somebody else's process.
  • Submit the evidence in whatever form that operator accepts.
  • Wait through a review cycle whose timing is entirely theirs.

During that window your support team is explaining to unaffected customers why their transactional mail is bouncing. Some operators eventually migrate the affected tenants onto fresh address space, which works, costs money, and does nothing about the next occurrence. The only genuinely cheap intervention is compressing the interval between a kit going live and you knowing about it, because the listing is triggered by external observation — and if you observe first, you can remove the content before anyone else's observation is worth acting on.

Where the daily rebuild cadence does real work

External detection of a new phishing hostname and its arrival in a shared feed happen on similar timescales, so a platform intersecting its inventory against the current build each morning is usually looking at the same finding a blocklist operator is about to act on — but with the ability to remove the content rather than merely record it. That is not a guarantee and should not be sold internally as one. It is a meaningful shift in the odds, and across a year it is the difference between a couple of listing incidents and a steady trickle of them. Operators who also run resolvers for customer-facing services often load the same feed there; the mechanics are covered on DNS filtering and ISP and telco networks.

Method comparison

Three ways to learn that you are hosting a phishing page

They fail in different directions, which is the argument for running more than one — and for being precise about which does what.

Question Wait for abuse reports Document-root signature scanning Feed × inventory intersection
Finds it before an outside party complains Never, by definition On the next scan pass On the next daily build
Works on unmanaged VPS and container tenants Reports arrive regardless No filesystem access Hostname-level, no agent
Sees past cloaking that hides the page from crawlers Only if a victim reported it Reads files, not responses Depends on prior verification
Tells you the exact file to remove Usually a full URL Path and file hash Hostname only
Confirms the target is live right now Stale reports are common Files may be orphaned DNS-verified within 24 h
Cost of adding another 100,000 vhosts Grows with ticket volume CPU and I/O on every node One more join, same daily file
Catches a kit uploaded in the last hour Not until somebody sees it If the scan interval is short Not yet observed or verified
Produces a dated record for a takedown file A mailbox thread Scanner output Feed row with observation date

Read the losing rows carefully. The intersection is beaten on freshness and it will never point at a file. It wins on the tenants whose disks you cannot read, on cost at fleet scale, and on the certainty that what it returns is live rather than historical.

Honest limits

What a known-bad list will not do for your platform

Worth reading before this goes into a policy document or a customer-facing security page.

It is a known-bad lookup, so it is a floor

A kit that went live forty minutes ago on a hostname nobody has yet observed is not in the database, and no amount of query volume will conjure it there. What you get is phishing infrastructure already caught and confirmed — on a large fleet a meaningful and continuously refreshed set, but never the first thing to notice a brand-new campaign. If your platform is a frequent target of novel kits, this belongs alongside filesystem integrity monitoring and outbound mail anomaly detection rather than instead of them.

It records hostnames, never paths

A listing on a customer's domain tells you the domain is serving phishing somewhere, not where. Locating the file is still your job, and on a busy shared node that means a targeted scan of the document root with modification timestamps as the starting point. The granularity cuts in your favour on subdomain namespaces though: a listing on one label under your free-subdomain domain is a statement about that label, not the parent. Never build automation that suspends a namespace because one of its children appeared.

DNS verification cuts both ways

Every entry is confirmed to be resolving, which is exactly what makes the list actionable — but it also means an attacker who pulls the DNS record while leaving the files in place drops out of the list. The content is still on your disk, still reachable by address or by some future hostname, and still evidence of a compromised account. Treat a hostname that disappears from the intersection as a case to close deliberately, with a verification call and a look at the filesystem, rather than as a case that resolved itself.

It makes no statement about intent

It tells you a hostname is serving phishing. It does not tell you whether the account holder is a criminal or a bakery whose plugin was three versions behind. That distinction drives your entire response — quarantine and notify, or suspend and refer — and it is yours to make from account history, payment signals and how the customer answers the notification. Any vendor implying otherwise is selling a judgement they are not positioned to have.

And none of it replaces multi-factor authentication on control-panel logins. Mandatory MFA on the client area and on cPanel or Plesk remains the single highest-yield change most hosts can still make, because it removes the route that needs no exploit at all. Everything on this page assumes that work is either done or scheduled.
From the abuse team

Questions that come up in the first week

The practical ones, answered without hedging.

We already run a filesystem scanner across the shared nodes. What does a hostname feed add?

Coverage of everything the scanner cannot read. A signature scanner is excellent on managed shared hosting where you own the filesystem, and it gives you the exact file, which the feed never will. It gives you nothing at all on the tenants you cannot reach into:

  • An unmanaged VPS or a customer-run container.
  • An object-storage-backed static site.
  • A CDN property pointed at somebody else's origin — and on most platforms that population is growing faster than the managed one.
  • They also fail on different axes: a scanner misses kits obfuscated enough to evade its signatures, the feed misses kits nobody has observed yet. A hostname appearing in both is a case you can act on immediately with no further verification.
A customer's domain is listed. Do we have to suspend the whole account?

Almost never as a first action. The overwhelmingly common case is a compromised legitimate site, where the proportionate response is to quarantine the offending path, leave the rest of the site serving, and notify the customer with the evidence and a remediation checklist. Full suspension is reserved for the accounts where proportionality runs out:

  • The phishing content is the only content on the account.
  • The account is new and the payment instrument looks suspect.
  • There is a prior finding against the same customer.
  • The customer goes silent past your notification window.
  • Write that ladder down before you need it. The failure we see most often is not a platform being too slow to suspend — it is an analyst making an escalation call under time pressure with no documented policy behind them, and the platform absorbing the fallout whichever way it goes.
What exactly does "DNS-verified" mean, and why should an abuse desk care?

It means every hostname in the database has been confirmed to resolve in DNS as part of the daily rebuild, and hostnames that stop resolving are dropped rather than retained — the database is a snapshot of what is live, not an archive of everything ever seen. For an abuse desk that is the difference between a usable queue and an unusable one:

  • A list that retains history generates findings against customers who cleaned up months ago, burns analyst time, and damages the relationship the first time you send a notice about a problem that no longer exists.
  • A list where every row currently resolves is a list where every row is worth opening a case about, which is the only condition under which case creation can be automated at all.
Can we screen a domain at the moment a customer points it at us?

Yes, and it is the cheapest control described here. A single call to the check endpoint when a domain is added as a primary, addon or parked domain returns in well under fifty milliseconds and costs one credit — and attackers do reuse domains that are already burned, so catching one at provisioning saves the entire downstream cycle of kit, report, triage, suspension and appeal. Two implementation rules matter:

  • Keep the call server-side, on the provisioning worker rather than in the control-panel page, so the key never reaches a browser.
  • Fail open, not closed. If the lookup errors or times out, provision the domain and queue it for the next batch sweep rather than blocking a paying customer on an unavailable dependency.
How do we handle a listing on one of our own free-subdomain labels?

Faster than a customer domain, and with a narrower blast radius in mind. That hostname is spending your brand's reputation rather than a customer's, and the filters and browsers acting on it may generalise to the parent, so these belong at the top of the priority queue with the takedown as a single automated action rather than a ticket somebody picks up in the morning. Two guardrails go with that:

  • Scope the action to the label. A listing on label.yourbrand.example is a statement about that label alone.
  • Never let automation touch the parent. Acting on the parent because a child was listed is how a platform takes its own namespace offline at three in the morning.
How many credits does a platform our size actually consume?

It depends entirely on which access mode you lean on. Fleet-wide sweeps belong on the daily CSV feed, which is a separate subscription and does not consume per-lookup credits at all — you pull the whole database and match locally, so a million-vhost estate costs the same as a ten-thousand-vhost one. Credits are for decision-point lookups, and a worked example sizes them quickly:

  • Three thousand abuse-report verifications a day plus two thousand provisioning checks is roughly 1.8 million lookups a year.
  • Enterprise Plus is Enterprise at $999/month for 750,000 lookups per lookup, and lookups reset each month — so that fits inside a single package.
  • Smaller platforms are usually well served by Professional at $249/month for 100,000 lookups. All of it is on the pricing page.
Does this help if an upstream blocklist has already listed our range?

It helps you get out and stay out; it does not shorten the delisting queue itself. What it changes is the quality of your answer at two moments:

  • During the request. Every operator asks what else is currently live in the range. You can show you checked every hostname on the affected addresses against a current, DNS-verified list rather than asserting that you looked.
  • Before the next one. Listings are triggered by external observation, so the platforms that get listed repeatedly are the ones with the longest gap between a kit going live and being found. Shortening that gap is the whole intervention, and it is measured in days rather than in policy documents.
Can we offer this to customers as a security feature?

Many hosts do, and it reads well on a managed tier: continuous monitoring of your hostnames against a daily-updated database of live phishing infrastructure, with a notification if your site is ever found serving it. Described accurately — monitoring and notification, not prevention — it is a claim you can stand behind, and it pairs naturally with the brand-protection monitoring larger customers already buy. Two claims to keep out of the marketing copy:

  • Never imply a guarantee that customers will not be compromised. Nothing here prevents a compromise; it shortens the time between one happening and both of you knowing.
  • Never let "clean" mean "secure". It means the hostname is not currently on a list of confirmed phishing infrastructure, and overselling a known-bad check is how a security feature becomes a support liability.

Run the join once and see what your own fleet returns

Most platforms are surprised by the first intersection, and usually not by the number — by which accounts are on it. Monthly plans start at $99/month for 25,000 lookups, and the whole-database CSV feed is available as a separate subscription for fleet-wide sweeps.