Deepen coverage for supported languages and frameworks#102
Merged
Conversation
Closes depth gaps within the already-supported set (Express, Next.js, FastAPI, Django, generic JS/TS/Python, provider SDKs) found by auditing the detectors, classifier, and docs. No new frameworks/languages; respects the v0.3+ roadmap deferrals. Implementation: - Next.js session-fixation is now first-class. The detector recognizes auth transitions in App Router handlers (cookies() session stores in an auth context) with handler-scoped evidence so a co-located clear-and-reissue suppresses the review; the classifier now routes the Next.js suggested fix. Privilege transitions continue to flow through the existing export-statement path to avoid double-counting. Fixtures + tests (behavioral assertions, not just metadata): - nextjs/session-fixation-signals (+ JSON snapshot) - fastapi/oauth-flow (Authlib static-state + unverified-callback review) - fastapi/trust-boundary, django/trust-boundary - express/jwt-validation (jsonwebtoken issuer/audience/expiry/decode posture) - generic-ts/sdk-auth0, generic-ts/sdk-supabase (per-SDK provider breakdown) Documentation: - Fixed SCHEMA.md CLI version (0.1.0 -> 0.2.0) and misleading COVERAGE_MATRIX claims (sliding-expiry trigger, Django Partitioned, Authlib OAuth vs JWT). - Added Generic JS/TS and Generic Python sections to FRAMEWORK_COVERAGE.md, split cloud-SDK docs into seven per-SDK subsections, and added vulnerable->fixed remediation snippets to SARIF_RULES.md. No new SARIF rule IDs; redaction trust boundary untouched. 478 tests pass. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Wrap the multi-condition `if` to satisfy `cargo fmt --all -- --check`, which gates the CI test job. No logic change. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Context
An audit of the implementation (
sessionscope-detectors,sessionscope-classifier) and docs found that the breadth of supported targets is well chosen, but depth was uneven: some frameworks relied entirely on generic fixtures for whole categories, the Next.js session-fixation classifier silently degraded to a generic suggested fix, the seven cloud SDKs were documented as one undifferentiated bucket, docs had no vulnerable→fixed examples, and severalCOVERAGE_MATRIX.mdclaims didn't match what the code actually fires on.Scope: depth-only within the already-supported set (Express, Next.js App Router, FastAPI, Django, generic JS/TS/Python, provider SDKs). No new frameworks/languages — the v0.3+ roadmap deferrals (Flask, Koa, Go, Rails, python-jose/Authlib-JWT, Django OAuth, Python client-storage) are explicitly preserved.
Changes
Implementation — Next.js session-fixation (the one code change)
app.post/router.post), so Next.js App Routerexport async function POST(...)handlers were never recognized. Added an ancestor-context auth-transition path guarded tocookies()session stores, emitting handler-scoped evidence so a co-locatedcookies().delete()+cookies().set()reissue suppresses the review. Privilege transitions keep flowing through the existing export-statement path (no double-counting).framework_for()now matches"nextjs"and emits a Next.js-specific suggested fix.Fixtures + tests (each backed by a hand-written behavioral assertion, since
expected.jsonis metadata-only)nextjs/session-fixation-signals(+ JSON snapshot) — 1 login + 1 privilege finding, clear-and-reissue suppressionfastapi/oauth-flow— Authlib static-state + unverified-callback reviewfastapi/trust-boundary,django/trust-boundary— cross-context token reuse + provider reviewexpress/jwt-validation—jsonwebtokenissuer/audience/expiry/decode posturegeneric-ts/sdk-auth0,generic-ts/sdk-supabase— per-SDK provider breakdown (Okta/Cognito/Azure AD/Firebase/Clerk left to a follow-up, as planned)Documentation
SCHEMA.mdCLI version (0.1.0→0.2.0) and misleadingCOVERAGE_MATRIX.mdrows (sliding-expiry trigger, DjangoPartitioned, Authlib OAuth-flow vs JWT-validation).FRAMEWORK_COVERAGE.md(grounded in actual detector code, e.g. the exact browser-client path heuristics).SARIF_RULES.md.Compatibility & safety
Verification
cargo test --workspace→ 478 tests pass, 0 failurescargo clippyclean on changed crates🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmithwith what you need. Autofix is disabled.