Safety and trust
Authorized stores
Which stores AisleRun will test, why a public URL isn't permission, and how the browser is fenced off from everything else.
On this page
AisleRun only tests stores its operator has explicitly authorized. A URL being public isn't permission. Automated shopping on someone else's store without their consent is a problem whether or not the page is reachable.
Who's authorized today
During the MoonPay hackathon the only authorized store is AisleRun's own test store, one entry per version. GET /v1/meta lists them.
curl https://aislerun.158-220-85-120.sslip.io/v1/meta
Each authorized store is an origin plus a product path prefix, like https://aislerun-fixtures.vercel.app and /v/fixture-fixed-v2/products/. A quote for any other origin or path is refused.
What a URL has to pass
| Check | Refused when |
|---|---|
| Scheme | It isn't HTTPS |
| Credentials | The URL has a username or password in it |
| Port | It isn't the default HTTPS port |
| Host | It's an IP address instead of a name |
| Origin and path | It isn't the authorized origin, or it's outside the product prefix, including encoded .. tricks |
| DNS | The name resolves to a private, loopback, link-local or reserved address |
All of this happens at the quote and again before payment, so a refused store never costs anything and never starts a browser.
How the browser is fenced in
The checks above stop a bad URL from being accepted. Three more layers stop the browser from reaching anything else once it's running.
- Every request is filtered. Each page, script, image and redirect the browser asks for is checked against the authorized origin. Anything else is blocked and listed in the report under blocked requests.
- Redirects are checked. If the page lands somewhere off the authorized store, the run stops as Inconclusive with
TARGET_LEFT_ALLOWLIST. - The network itself is fenced. In production the browser's only route out is a network whose firewall drops private, loopback, link-local and cloud-metadata addresses, so even Chromium's own DNS can't reach them. A request to
169.254.169.254from inside the container times out.
What the browser never does
- Log in, create an account or read an account page.
- Type anything into checkout, payment or shipping forms.
- Submit an order.
- Get past CAPTCHAs or bot checks. Those end the run as Inconclusive.
- Treat text on the store's page as instructions. Page content is data, never a command.