Website check
npmjs.com
In plain English
Overall, npmjs.com scored well on this passive check, with an A+ grade (97 out of 100). The most important item to address is the Content Security Policy, which allows inline or eval'd scripts. That weakens one of the main defenses against injected code, so tightening it is the first fix to make. The only other item is a missing security.txt file, which is a low-effort addition that tells researchers where to report problems. Visitors do not need to be worried based on these results.
Content Security Policy allows unsafe scripts
The policy allows inline or eval'd scripts, which removes most of its protection against injected code.
How to fix: Move inline scripts into files or give them nonces or hashes, then drop 'unsafe-inline' and 'unsafe-eval'.
script rules include 'unsafe-eval'
No security.txt file
security.txt tells researchers how to report a security problem to you. Without it, reports may go unsent or to the wrong place.
How to fix: Publish /.well-known/security.txt with at least a Contact: line and an Expires: date (see securitytxt.org).
What the agent did (13 steps)
- 01Picked up a daily rating check
- 02Looking up npmjs.com and connecting over HTTPS
- 03Connected over HTTPS: www.npmjs.com answered 403 after 1 redirect
- 04Certificate from Google Trust Services, valid 48 more days (TLSv1.3)
- 05Read the security headers: HSTS, CSP, X-Frame-Options, nosniff, Referrer-Policy set
- 06Checked 1 cookie for Secure, HttpOnly and SameSite
- 07No PHP version given away
- 08Found 0 script sources from other sites
- 09Plain http:// redirects to HTTPS
- 10Old TLS 1.0/1.1: refused
- 11No security.txt
- 12Email spoofing protection: SPF set, DMARC set
- 13Scored 97/100, grade A+. Writing it up in plain English
Technical details (30)
- ip
- 104.17.135.117
- caa
- 0 issuewild "pki.goog; cansignhttpexchanges=yes", 0 issuewild "sectigo.com", 0 issuewild "ssl.com", 0 issue "comodoca.com", 0 issue "digicert.com; cansignhttpexchanges=yes", 0 issue "letsencrypt.org", 0 issue "pki.goog; cansignhttpexchanges=yes", 0 issue "sectigo.com", 0 issue "ssl.com", 0 issuewild...
- tls cipher
- TLS_AES_256_GCM_SHA384
- tls issuer
- Google Trust Services
- tls subject
- npmjs.com
- tls validTo
- 2026-12-10T04:46:16.000Z
- tls daysLeft
- 48
- tls protocol
- TLSv1.3
- tls authorized
- true
- email spf
- v=spf1 include:stspg-customer.com include:mail.zendesk.com include:_spf.google.com include:5326678.spf10.hubspotemail.net include:servers.mcsv.net include:amazonses.com ~all
- email apex
- npmjs.com
- email dmarc
- v=DMARC1; p=quarantine; pct=5; rua=mailto:dmarc@github.com,mailto:d@rua.agari.com
- status
- 403
- cookies
- __cf_bm
- headers server
- cloudflare
- headers referrer-policy
- same-origin
- headers x-frame-options
- SAMEORIGIN
- headers permissions-policy
- accelerometer=(),camera=(),clipboard-read=(),clipboard-write=(),geolocation=(),gyroscope=(),hid=(),magnetometer=(),microphone=(),payment=(),publickey-credentials-get=(),screen-wake-lock=(),serial=(),s...
- headers x-content-type-options
- nosniff
- headers content-security-policy
- default-src 'none'; script-src 'nonce-vmmr2TIqiQwq77AzSfabeO' 'unsafe-eval' https://challenges.cloudflare.com; script-src-attr 'none'; style-src 'unsafe-inline'; img-src 'self' https://challenges.cloudflare.com; connect-src 'self' https://challenges.cloudflare.com; frame-src 'self' https://challenge...
- headers strict-transport-security
- max-age=31536000; includeSubDomains; preload
- finalUrl
- https://www.npmjs.com/
- requests
- 4
- timingMs
- 200
- reachable
- true
- oldTlsProbe
- rejected
- securityTxt
- false
- httpRedirect
- redirects to https
- thirdPartyScripts
- 0
- thirdPartyScriptHosts
This check is passive and automated: it reads only what a normal visit can see and can miss problems a full audit would find. A good grade is not a guarantee. If you run this site and something here is wrong, the fix steps are a starting point, not a substitute for your host or a security professional.
