Loading report…
← nittim
[](https://nittim.com)Shippable once the listed conditions are addressed.You can make it live once the listed conditions are handled.Handle the listed conditions, then ship.
package.jsondependencies: "sanitize-html": "~2.13.0"; OSV: GHSA-vccv-cmxp-4j9h (MODERATE) — incomplete URI scheme validation allowing javascript: URIs via action, formaction, data, poster, background attributes. lib/sanitize.js passes user input directly to sanitizeHtml(data, options.sanitizerOptions).package.jsondevDependencies: "body-parser": "^1.19.0"; OSV: GHSA-qwcr-r2fm-qrc7 (HIGH, DoS via urlencoding) and GHSA-v422-hmwv-36x6 (LOW, DoS via invalid limit). Scanner notes these are devDependency / non-production manifest — not shipped to production.index.jsObject.defineProperty(req,'query',{value:sanitizedQuery, writable:false, configurable:true, enumerable:true}).7 of 10 files were audited. The denominator counts every file in the repository — images, generated output, vendored and build directories included. nittim reads source and configuration only, highest-value files first. Nothing here was cut short by a size or file-count limit — the gap is almost entirely non-code content, not skipped source.
Dependency manifests: 1 package root found, 1 scanned.
express-xss-sanitizer is a small, mature, widely-used Express middleware npm package (v2.0.2) that wraps sanitize-html to strip XSS payloads from req.body, req.query, req.headers and req.params. The code is compact, readable, and backed by a substantial mocha/supertest suite covering simple and nested objects, custom options, and route- vs app-level usage. The most material issue is that this security-critical package ships a production dependency (sanitize-html ~2.13.0) with a known MODERATE advisory (GHSA-vccv-cmxp-4j9h) for incomplete URI-scheme validation that can let javascript: URIs through certain attributes — directly relevant to a library whose whole purpose is XSS prevention. The two body-parser advisories are confined to devDependencies and are not shipped to consumers. Secondary concerns are in-place mutation of caller objects, sanitizing HTTP headers (unusual and potentially disruptive), and making req.query non-writable which can break downstream middleware. No hardcoded secrets were found. There is no novel IP at stake; this is a conventional sanitization wrapper. Overall the project is close to production-safe for its scope, conditional on bumping the sanitize-html dependency and validating the header/query behavior against downstream expectations.
lib/sanitize.jsobject branch assigns data[key] = ... directly and returns the same reference; index.js reassigns req.body/req.params/req.headers to the mutated objects.lib/sanitize.jshasOwn uses Reflect.ownKeys(object).filter(...).includes(key) instead of Object.prototype.hasOwnProperty.call; initializeOptions mixes validation and defaulting inline.index.jsiterates ['body','params','headers'] and runs sanitize over req.headers; test/test.js asserts headers like a:'<script>Test</script>' become '' after sanitization.Weighted blend of 4 dimensions → ~79/100. Dimensions are weighted by importance (Security and Privacy weigh heaviest). Published figures are approximate; nittim's exact weighting and precise scoring are proprietary, while the verdict is computed on exact internal values.4 categories combine into ~79/100. Some categories count for more than others (Security and Privacy count the most). The published numbers are approximate; nittim's exact math is kept private, while the verdict itself is worked out from the exact internal numbers.Weighted blend of 4 dimensions → ~79/100 (Security and Privacy weigh heaviest). Published figures are approximate; nittim's exact weighting is proprietary. The verdict runs on exact internal values.
IP Protection is an independent IP-defensibility lens and is excluded from this blend.IP Protection (checking whether your ideas are exposed) is judged separately and isn’t
part of this combined number.IP Protection is judged separately, excluded from this blend.
Scores are a judgement, not a measurement: a re-audit of the same commit can land a few
points either side of this figure. The evidence underneath it is deterministic — the same
commit always yields the same committed-secret and vulnerable-dependency findings.Scores are a judgment call, not an exact measurement: checking the same saved snapshot of
your code twice can land a few points either side of this number. The evidence underneath
it is not — the same snapshot always turns up the same passwords-in-code and known-security-bug
findings.Scores are a judgment, not a measurement — a re-audit can land a few points either side. The evidence underneath is deterministic: the same commit always yields the same secret and vulnerable-dependency findings.
Each score is the model's overall assessment of the dimensions it covers, across everything it reviewed — not a tally of the findings in this report. Findings are the subset worth acting on, so a score can sit above or below what the listed findings alone would suggest.Each score is the AI's overall judgment of everything it reviewed in that category — not a
count of the problems listed in this report. The listed problems are the ones worth acting
on, so a score can sit above or below what they alone would suggest.Each score is the model's overall assessment across everything it reviewed — not a tally of this report's findings. A score can sit above or below what the findings alone suggest.
Verdict rationale — Why this verdict — Verdict rationale — This is a small, focused, well-tested library with no committed secrets and clean, readable code. The blocking condition is dependency hygiene in a security-critical package: it ships sanitize-html ~2.13.0 which carries a MODERATE advisory (GHSA-vccv-cmxp-4j9h) directly relevant to its XSS-prevention purpose — this should be bumped and gated in CI before further releases. The body-parser advisories are devDependency-only and non-shipping. Remaining items (in-place mutation, header sanitization behavior, non-writable req.query, missing CI) are low-severity refinements. Once the sanitize-html dependency is updated and a dependency-audit gate is added, the package is production-appropriate for its scope. IP exposure and AI-authorship scores are independent lenses and did not affect this verdict.