Home / Knowledge hub / Pagination abuse
Knowledge hub
Pagination abuse
Asking for huge pages or walking every page to pull data out in bulk.
What it means
Pagination splits a long list into pages, so a client asks for the next fifty records rather than all of them at once. Pagination abuse is using that mechanism to take far more than intended, either by asking for a huge page or by looping through every page.
A page size, an offset or a cursor is only a request parameter. If the server accepts limit=1000000, or lets a single account step through the whole table, the paging has not limited anything. What counts is whether the server enforces the limit on its side.
Why it matters
Bulk reads are how a small flaw becomes a data breach. One missing check on a single record is a problem. The same check missing on a list that can be walked end to end is your entire customer table in one afternoon. The cost is also server load, which can slow everyone else down.
It combines badly with weak access rules. A list endpoint that skips the ownership check returns other people's records, and paging hands them over neatly in order. See also resource consumption. Weak list endpoints are among the quickest ways to move a lot of data.
How it shows up
You meet it in list and search endpoints, exports, admin tables and any infinite scroll. Typical mistakes are no maximum page size, sequential offsets that make it easy to count and walk everything, a total count that reveals how much there is, and no limit on how fast pages can be fetched.
Fix it on the server. Set a hard upper limit on page size, prefer opaque cursors to raw offsets, filter every page by what the caller may see, and apply rate limits per account. Test by asking for oversized pages and by walking a list from a low-privilege account.
Questions people ask
Pagination abuse, answered
What page size is safe?
There is no universal number. Choose a cap that matches what a real screen or integration needs, and enforce it on the server, ignoring larger values rather than trusting the client.
Return an error or the capped size, not what was asked for.
Are cursors safer than offsets?
A little. Opaque cursors are harder to guess and skip around, and they perform better on large tables. They do not replace access checks.
If the cursor works for any account, anyone can still walk the list.
Is this the same as scraping?
Scraping is the broader act of collecting data in bulk, often from public pages. Pagination abuse is one way to do it against an API.
The defences overlap: caps, rate limits and per-account checks.
Does hiding the total count help?
It helps a little, since the total tells a collector how long the job will take. It is not a control by itself.
Limits and access checks are what actually stop a bulk pull.
How do we test for pagination abuse?
Request pages far larger than the interface ever does, jump to extreme offsets, and loop through a list from an ordinary account. Note what comes back and how fast.
Then check that another account's records never appear.
Sources
Where this comes from
Related
Terms that sit next to this one
Scraping
Automatically copying large amounts of data from your site or API.
Enumeration
Working out what exists by asking repeatedly and watching the answers.
API rate limiting
Capping how many calls a client can make so abuse and cost stay bounded.
Unrestricted resource consumption
API calls that can use unlimited CPU, memory, money or third-party credits.
BOLA
An API returns a record just because you asked for it by number.
Can one account walk the whole list?
We test list and export endpoints for oversized pages, missing caps and records belonging to other accounts, and show the request and response. Book a pilot on one app.
Or start with a $199 pilot on one application: thirty days, success criteria agreed before day one, credited against the annual if you convert.