npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

strapi-security

v0.1.0

Published

Audit any Strapi CMS for public-role data exposure, CORS reflection, user enumeration and GraphQL introspection — and PROVE each leak live with an anonymous probe. No admin token needed for the keyless scan.

Downloads

9

Readme

strapi-security

Audit any Strapi CMS for the misconfigurations that actually leak data — public-role read exposure, CORS reflection, user enumeration, GraphQL introspection, and the relational-populate admin oracle — and prove each one live with an anonymous probe. Other checklists tell you what might be wrong; this fetches the bytes and shows you what is.

Run it in one line, no admin token, no install:

npx strapi-security --url https://your-strapi.example.com

🤝 Want it done for you? Fixed-scope audit — $99 / 24h: I verify each finding live and send a written report with the exact config fixes.

npm downloads license node deps

$ npx strapi-security --url https://cms.example.com
1 critical, 2 high, 0 medium — 3 CONFIRMED via anonymous probe
  CRITICAL  /api/articles   public-role read enabled — 1,204 rows reachable
  HIGH      CORS            Origin reflected → cross-site credentialed reads
  HIGH      /api/users      user list exposed (username + email)

Why this exists

Strapi powers a huge share of headless-CMS deployments, and the default Users & Permissions model makes one mistake very easy: leaving find/findOne enabled for the Public role. The result is an API anyone can read. 2026 alone brought a cluster of data-exposure CVEs around public endpoints (CVE-2026-27886 relational filtering oracle, CORS reflection, lookup-operator private-field leaks).

strapi-security checks for these and confirms the real ones by issuing the exact anonymous request an attacker would — so you triage facts, not maybes.

What it checks

| Check | Severity | How it's confirmed | |---|---|---| | Public-role read on a content-type | critical | anonymous GET /api/{collection} returns rows | | CORS reflects arbitrary Origin | high | sends a foreign Origin, sees it echoed in Access-Control-Allow-Origin | | /api/users user enumeration | high | anonymous GET /api/users returns the user list | | Relational-populate admin oracle | high | ?populate=createdBy leaks admin fields | | GraphQL introspection in prod | medium | __schema query answered on /graphql | | Open first-admin registration | critical | /admin/init reports hasAdmin:false |

Usage

# Probe a live instance (guesses common collection names)
npx strapi-security --url https://cms.example.com

# Learn your exact collection names from your local repo, then probe
npx strapi-security --url https://cms.example.com --discover ./my-strapi-app

# Probe specific collections
npx strapi-security --url https://cms.example.com --collections articles,authors

# Write a shareable HTML report
npx strapi-security --url https://cms.example.com --html report.html

# Static only (no requests sent)
npx strapi-security --url https://cms.example.com --no-probe

Output is JSON on stdout (pipe it into CI) and a one-line summary on stderr. Exit is non-zero only on usage errors — gate your pipeline on the JSON summary.

Install (optional)

npm i -g strapi-security
strapi-security --url https://cms.example.com

Zero dependencies. Your data and credentials never leave your machine — every request goes straight from the tool to your Strapi instance.

Sister tools

Same active-probe philosophy for the rest of the backend stack, all MIT:

supabase-security · pocketbase-security · firebase-security · appwrite-security · nhost-security

License

MIT © Renzo Madueno