Plain http traffic is sent on to https
Visitors who type the address without https land on the encrypted version instead of the plain one.
Learn
The free check can report 67 findings. Each one has a page: what it means in plain words, why apps built by a prompt get it, what it affects, and the exact fix. Nothing here is a score and nothing here is a verdict.
Visitors who type the address without https land on the encrypted version instead of the plain one.
Someone who reaches the plain http address stays on an unencrypted connection, so anything typed on that page travels in the clear.
Browsers show a warning page or refuse the connection, so most visitors never reach the app at all.
Browsers block or downgrade these files, so parts of the page can break, and the padlock treatment is lost.
Nothing on the page is pulled over a plain connection.
Browsers remember to use https for this domain on later visits.
A browser that has been to the site before can still be pushed to the plain http version on a hostile network.
The page tells the browser which sources of scripts and styles it will accept.
If any injected markup reaches a page, the browser has no rule telling it which scripts it is allowed to run.
The script-src rule includes unsafe-inline, which removes most of the protection the policy would otherwise give.
Browsers will not guess a file type that differs from the one you declared.
A browser may treat an uploaded or user supplied file as a script because it guesses the type.
Other sites cannot silently place your pages inside their own.
Another site can load your pages inside an invisible frame and trick a signed in visitor into clicking things they cannot see.
Outbound links do not carry the full address of the page the visitor came from.
Full page addresses, including anything you put in a path or query string, are sent to third party sites your pages link to or load from.
Camera, microphone, and location access are limited to what you named.
Embedded third party frames can ask for camera, microphone, or location on your domain's behalf.
Anyone can rebuild your original files, including comments, file names, and any logic you assumed was hidden.
The bundles checked did not resolve to a readable source map.
Anyone who opens the page can read this key and use it directly against the service it belongs to, with your account paying for it.
The known server key patterns did not appear in the files checked. Publishable and browser keys are expected there and are ignored.
Anyone can see this from a browser. It is listed so you know what is on show.
Naming the exact version tells anyone scanning the internet which known issues to try first against your host.
This file usually carries configuration, keys, or repository history, and it is readable by anyone who asks for it.
Requests for configuration and repository files came back empty or missing.
These files tell crawlers and researchers how to treat the site.
The platform reports the following checks for this app: {checks}.
A request made with the browser key alone returned rows, which means the row rules on those tables let anonymous readers in.
An anonymous request could not list the tables behind the app.
The public schema names {total} functions callable by name: {functions}. Whether each checks authorization needs a code review. ShipReady lists the names and never calls them, which is why backend rules stay on the not verified list.
A cookie without Secure can travel over a plain connection, and one without HttpOnly can be read by any script on the page.
No cookie was set without its protective flags on this response.
The landing response set no cookies, so there were no flags to check.
Mail servers can see which services are allowed to send using your domain.
Anyone can send mail that claims to come from your domain, and your own mail is more likely to land in spam.
You have told receiving servers what to do with mail that fails the checks.
Receiving servers have no instruction for mail that fails the checks, so forged mail from your domain is more likely to be delivered.
The app is on a shared hosting domain ({domain}), so its mail records belong to the platform and not to you.
Visitors can find how their information is handled.
Payment providers, app stores, and several privacy laws expect a reachable privacy page before you take anyone's details.
Visitors can find the rules of using the product.
Without stated terms you have no written basis for suspending misuse or limiting your liability.
Buyers can see the refund position before they pay.
Card processors expect a stated refund position, and disputes are harder to answer without one.
A request with the browser key returned the names of {total} storage buckets: {buckets}. Names alone give a reader the shape of what you store.
These buckets are marked public, so any file inside one can be read by anyone who knows or guesses its address: {buckets}.
An object list request carrying only the browser key came back from these buckets: {buckets}. The counts show how much is behind each name. ShipReady records names and counts and never keeps an object name or a file.
One object address from each of these buckets answered a plain request with no session: {buckets}. Anything stored there can be read by anyone who can list it.
The bucket listing did not come back to a request holding only the browser key.
{path} answered a request from an outside origin with an allow origin of {origin} and credentials allowed, so a page on another domain can read responses using your visitor's session.
{path} answered with an allow origin of {origin}, so any site can read what it returns. Without credentials that is only a problem for data you did not mean to publish.
A request from an outside origin came back without a header inviting other sites to read the response.
The public registry record says {domain} expires on {expiry}, which is {days} days away. That is close enough to put a renewal on the calendar now.
The public registry record says {domain} expires on {expiry}, which is {days} days away. An expired domain takes the app, the mail, and the sign in links with it.
The public registry record says {domain} expires on {expiry}, {days} days away.
{domain} belongs to the hosting platform, so there is no registration of yours to expire and no registry record to read.
A plain request to {endpoint} returned data with no sign in, so the rules on that database let anonymous readers in.
A plain request to {endpoint} returned an object listing with no sign in, so anyone can enumerate what is stored.
Requests with no sign in came back with documents from these collections: {collections}. ShipReady records the collection names and the counts and never keeps a document.
The database and storage endpoints refused a request that carried no sign in.
The public auth settings at {endpoint} report that self signup is on, so a script can create accounts at will.
The public auth settings report that new sign ups are confirmed automatically, so an account can be created with an address the person does not own. You did not declare customer data, so this is recorded rather than raised.
The public auth settings at {endpoint} report anonymous sign in is on, so a caller can hold a session without ever giving an address. That is fine when it is deliberate and a problem when row rules assume a known person.
The public auth settings report that new sign ups are confirmed automatically, so an account can be created with an address the person does not own.
The public auth settings list these sign in methods: {providers}.
Self signup is closed and new accounts have to confirm their address.
Run all sixteen groups on your published address and see the evidence behind every result.
ShipReady is not a penetration test or a security certification. No automated check can prove an application is secure.
Last updated September 20, 2026