ship-safe 3.2.0 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  <p align="center">
2
2
  <img src=".github/assets/logo%20ship%20safe.png" alt="Ship Safe Logo" width="180" />
3
3
  </p>
4
- <p align="center"><strong>Don't let vibe coding leak your API keys.</strong></p>
4
+ <p align="center"><strong>AI-powered application security platform for developers.</strong></p>
5
5
 
6
6
  <p align="center">
7
7
  <a href="https://www.npmjs.com/package/ship-safe"><img src="https://badge.fury.io/js/ship-safe.svg" alt="npm version" /></a>
@@ -13,523 +13,287 @@
13
13
 
14
14
  ---
15
15
 
16
- You're shipping fast. You're using AI to write code. You're one `git push` away from exposing your database credentials to the world.
16
+ 12 security agents. 50+ attack classes. One command.
17
17
 
18
- **Ship Safe** is a security toolkit for indie hackers and vibe coders who want to secure their MVP in 5 minutes, not 5 days.
18
+ **Ship Safe v4.0** is an AI-powered security platform that runs 12 specialized agents against your codebase — scanning for secrets, injection vulnerabilities, auth bypass, SSRF, supply chain attacks, Docker/Terraform misconfigs, CI/CD pipeline poisoning, LLM security issues, and more. It produces a prioritized remediation plan so you know exactly what to fix first.
19
19
 
20
20
  ---
21
21
 
22
22
  ## Quick Start
23
23
 
24
24
  ```bash
25
- # AI-powered audit: scan, classify with Claude, auto-fix confirmed secrets
26
- npx ship-safe agent .
25
+ # Full security audit secrets + 12 agents + deps + remediation plan
26
+ npx ship-safe audit .
27
+
28
+ # Red team scan only (12 agents, 50+ attack classes)
29
+ npx ship-safe red-team .
27
30
 
28
- # Scan for secrets AND code vulnerabilities (SQL injection, XSS, etc.)
31
+ # Quick secret scan
29
32
  npx ship-safe scan .
30
33
 
31
- # Security health score (0-100, A–F grade)
34
+ # Security health score (0-100)
32
35
  npx ship-safe score .
33
-
34
- # Audit dependencies for known CVEs
35
- npx ship-safe deps .
36
-
37
- # Auto-fix hardcoded secrets: rewrite code + write .env
38
- npx ship-safe remediate .
39
-
40
- # Revoke exposed keys — opens provider dashboards with step-by-step guide
41
- npx ship-safe rotate .
42
- ```
43
-
44
- Or if you prefer the manual toolkit:
45
-
46
- ```bash
47
- npx ship-safe fix # Generate .env.example from secrets
48
- npx ship-safe guard # Block git push if secrets found
49
- npx ship-safe checklist # Run launch-day security checklist
50
- npx ship-safe init # Add security configs to your project
51
36
  ```
52
37
 
53
38
  ![ship-safe terminal demo](.github/assets/ship%20safe%20terminal.jpg)
54
39
 
55
- ### Let AI Do It For You
56
-
57
- Copy this prompt to your AI coding assistant:
58
-
59
- ```
60
- Run "npx ship-safe scan ." on my project and fix any secrets you find.
61
- Then run "npx ship-safe init" to add security configs.
62
- Explain what you're doing as you go.
63
- ```
64
-
65
- [More AI prompts for specific frameworks](./AI_SECURITY_PROMPT.md)
66
-
67
- ---
68
-
69
- ## Why This Exists
70
-
71
- Vibe coding is powerful. You can build a SaaS in a weekend. But speed creates blind spots:
72
-
73
- - AI-generated code often hardcodes secrets
74
- - Default configs ship with debug mode enabled
75
- - "I'll fix it later" becomes "I got hacked"
76
-
77
- This repo is your co-pilot for security. Copy, paste, ship safely.
78
-
79
40
  ---
80
41
 
81
- ## CLI Commands
42
+ ## The `audit` Command
82
43
 
83
- ### `npx ship-safe agent [path]`
84
-
85
- AI-powered security audit. Scans for both secrets and code vulnerabilities, sends findings to Claude for classification, auto-fixes confirmed secrets, and provides specific fix suggestions for code issues.
44
+ One command that runs everything and generates a full report:
86
45
 
87
46
  ```bash
88
- # Full AI audit (requires ANTHROPIC_API_KEY)
89
- npx ship-safe agent .
90
-
91
- # Preview classification without writing any files
92
- npx ship-safe agent . --dry-run
93
-
94
- # Use a specific Claude model
95
- npx ship-safe agent . --model claude-opus-4-6
47
+ npx ship-safe audit .
96
48
  ```
97
49
 
98
- **Flow:**
99
- 1. Scan for secrets + code vulnerabilities (XSS, SQLi, command injection, etc.)
100
- 2. Send findings to Claude classify each as `REAL` or `FALSE_POSITIVE`
101
- 3. For secrets: auto-remediate confirmed findings (rewrite code + write `.env`)
102
- 4. For code vulns: print Claude's verdict + specific 1-line fix suggestion
103
- 5. Re-scan to verify secrets are gone
104
-
105
- No `ANTHROPIC_API_KEY`? Falls back to `remediate` for secrets automatically.
106
-
107
- ---
50
+ ```
51
+ ════════════════════════════════════════════════════════════
52
+ Ship Safe v4.0Full Security Audit
53
+ ════════════════════════════════════════════════════════════
108
54
 
109
- ### `npx ship-safe scan [path]`
55
+ [Phase 1/4] Scanning for secrets... ✔ 49 found
56
+ [Phase 2/4] Running 12 security agents... ✔ 103 findings
57
+ [Phase 3/4] Auditing dependencies... ✔ 44 CVEs
58
+ [Phase 4/4] Computing security score... ✔ 25/100 F
110
59
 
111
- Scans your codebase for leaked secrets **and** code vulnerabilities.
60
+ Remediation Plan
61
+ ════════════════════════════════════════════════════════
112
62
 
113
- ```bash
114
- # Scan current directory
115
- npx ship-safe scan .
63
+ 🔴 CRITICAL — fix immediately
64
+ ────────────────────────────────────────────────────────
65
+ 1. [SECRETS] Rotate Stripe Live Secret Key
66
+ .env:67 → Move to environment variable or secrets manager
116
67
 
117
- # Scan a specific folder
118
- npx ship-safe scan ./src
68
+ 2. [INJECTION] Unsafe pickle.loads()
69
+ backend/ai_processor.py:64 Use JSON for untrusted data
119
70
 
120
- # Get JSON output (for CI pipelines)
121
- npx ship-safe scan . --json
71
+ 🟠 HIGH fix before deploy
72
+ ────────────────────────────────────────────────────────
73
+ 3. [XSS] dangerouslySetInnerHTML without sanitization
74
+ frontend/src/utils/blogContentRenderer.jsx:50 → Add DOMPurify
122
75
 
123
- # SARIF output for GitHub Code Scanning
124
- npx ship-safe scan . --sarif
76
+ ... 149 more items in the full report
125
77
 
126
- # Verbose mode (show files being scanned)
127
- npx ship-safe scan . -v
78
+ 📊 Full report: ship-safe-report.html
128
79
  ```
129
80
 
130
- **Exit codes:** Returns `1` if issues found (useful for CI), `0` if clean.
81
+ **What it runs:**
82
+ 1. **Secret scan** — 50+ patterns with entropy scoring (API keys, passwords, tokens)
83
+ 2. **12 security agents** — injection, auth, SSRF, supply chain, config, LLM, mobile, git history, CI/CD, API
84
+ 3. **Dependency audit** — npm/pip/bundler CVE scanning
85
+ 4. **Score computation** — 8-category weighted scoring (0-100, A-F)
86
+ 5. **Remediation plan** — prioritized fix list grouped by severity
87
+ 6. **HTML report** — standalone dark-themed report with table of contents
131
88
 
132
89
  **Flags:**
133
- - `--json` — structured JSON output for CI pipelines
90
+ - `--json` — structured JSON output (clean for piping)
134
91
  - `--sarif` — SARIF format for GitHub Code Scanning
135
- - `--include-tests` — also scan test/spec/fixture files (excluded by default)
136
- - `-v` — verbose mode
137
-
138
- **Suppress false positives:**
139
- ```bash
140
- const apiKey = 'example-key'; // ship-safe-ignore
141
- ```
142
- Or exclude paths with `.ship-safeignore` (gitignore syntax).
143
-
144
- **Custom patterns** — create `.ship-safe.json` in your project root:
145
- ```json
146
- {
147
- "patterns": [
148
- {
149
- "name": "My Internal API Key",
150
- "pattern": "MYAPP_[A-Z0-9]{32}",
151
- "severity": "high",
152
- "description": "Internal key for myapp services."
153
- }
154
- ]
155
- }
156
- ```
157
-
158
- **Detects 50+ secret patterns:**
159
- - **AI/ML:** OpenAI, Anthropic, Google AI, Cohere, Replicate, Hugging Face
160
- - **Auth:** Clerk, Auth0, Supabase Auth
161
- - **Cloud:** AWS, Google Cloud, Azure
162
- - **Database:** Supabase, PlanetScale, Neon, MongoDB, PostgreSQL, MySQL
163
- - **Payment:** Stripe, PayPal
164
- - **Messaging:** Twilio, SendGrid, Resend
165
- - **And more:** GitHub tokens, private keys, JWTs, generic secrets
166
-
167
- **Detects 18 code vulnerability patterns (OWASP Top 10):**
168
- - **Injection:** SQL injection (template literals), command injection, code injection (`eval`)
169
- - **XSS:** `dangerouslySetInnerHTML`, `innerHTML` assignment, `document.write`
170
- - **Crypto:** MD5 / SHA-1 for passwords, weak random number generation
171
- - **TLS:** `NODE_TLS_REJECT_UNAUTHORIZED=0`, `rejectUnauthorized: false`, Python `verify=False`
172
- - **Deserialization:** `pickle.loads`, `yaml.load` without `Loader`
173
- - **Misconfiguration:** CORS wildcard (`*`), deprecated `new Buffer()`
92
+ - `--html [file]` — custom HTML report path (default: `ship-safe-report.html`)
93
+ - `--no-deps` — skip dependency audit
94
+ - `--no-ai` — skip AI classification
95
+ - `--no-cache` — force full rescan (ignore cached results)
174
96
 
175
97
  ---
176
98
 
177
- ### `npx ship-safe remediate [path]`
178
-
179
- Auto-fix hardcoded secrets: rewrites source files to use `process.env` variables, writes a `.env` file with the actual values, and updates `.gitignore`.
180
-
181
- ```bash
182
- # Auto-fix secrets
183
- npx ship-safe remediate .
184
-
185
- # Preview changes without writing any files
186
- npx ship-safe remediate . --dry-run
187
-
188
- # Apply all fixes without prompting (for CI)
189
- npx ship-safe remediate . --yes
190
-
191
- # Also run git add on modified files
192
- npx ship-safe remediate . --stage
193
- ```
99
+ ## 12 Security Agents
100
+
101
+ | Agent | Category | What It Detects |
102
+ |-------|----------|-----------------|
103
+ | **InjectionTester** | Code Vulns | SQL/NoSQL injection, command injection, code injection (eval), XSS, path traversal, XXE, ReDoS, prototype pollution |
104
+ | **AuthBypassAgent** | Auth | JWT vulnerabilities (alg:none, weak secrets), cookie security, CSRF, OAuth misconfig, BOLA/IDOR, weak crypto, timing attacks, TLS bypass |
105
+ | **SSRFProber** | SSRF | User input in fetch/axios, cloud metadata endpoints, internal IPs, redirect following |
106
+ | **SupplyChainAudit** | Supply Chain | Typosquatting (Levenshtein distance), git/URL dependencies, wildcard versions, suspicious install scripts |
107
+ | **ConfigAuditor** | Config | Dockerfile (running as root, :latest tags), Terraform (public S3, open SG), Kubernetes (privileged containers), CORS, CSP, Firebase, Nginx |
108
+ | **LLMRedTeam** | AI/LLM | OWASP LLM Top 10 — prompt injection, excessive agency, system prompt leakage, unbounded consumption, RAG poisoning |
109
+ | **MobileScanner** | Mobile | OWASP Mobile Top 10 2024 — insecure storage, WebView JS injection, HTTP endpoints, excessive permissions, debug mode |
110
+ | **GitHistoryScanner** | Secrets | Leaked secrets in git commit history (checks if still active in working tree) |
111
+ | **CICDScanner** | CI/CD | OWASP CI/CD Top 10 — pipeline poisoning, unpinned actions, secret logging, self-hosted runners, script injection |
112
+ | **APIFuzzer** | API | Routes without auth, missing input validation, mass assignment, unrestricted file upload, GraphQL introspection, debug endpoints |
113
+ | **ReconAgent** | Recon | Attack surface discovery — frameworks, languages, auth patterns, databases, cloud providers, IaC, CI/CD pipelines |
114
+ | **ScoringEngine** | Scoring | 8-category weighted scoring with trend tracking |
194
115
 
195
116
  ---
196
117
 
197
- ### `npx ship-safe rotate [path]`
118
+ ## All Commands
198
119
 
199
- Revoke and rotate exposed secrets. Detects which providers your secrets belong to and opens the right dashboard with step-by-step revocation instructions.
120
+ ### Core Audit Commands
200
121
 
201
122
  ```bash
202
- # Open dashboards for all detected secrets
203
- npx ship-safe rotate .
204
-
205
- # Rotate only a specific provider
206
- npx ship-safe rotate . --provider github
207
- npx ship-safe rotate . --provider stripe
208
- npx ship-safe rotate . --provider openai
209
- ```
123
+ # Full audit with remediation plan + HTML report
124
+ npx ship-safe audit .
210
125
 
211
- **Supports:** OpenAI, Anthropic, GitHub, Stripe, AWS, Google Cloud, Supabase, and more.
126
+ # Red team: 12 agents, 50+ attack classes
127
+ npx ship-safe red-team .
128
+ npx ship-safe red-team . --agents injection,auth # Run specific agents
129
+ npx ship-safe red-team . --html report.html # HTML report
130
+ npx ship-safe red-team . --json # JSON output
212
131
 
213
- ---
214
-
215
- ### `npx ship-safe deps [path]`
132
+ # Secret scanner (pattern matching + entropy)
133
+ npx ship-safe scan .
134
+ npx ship-safe scan . --json # JSON for CI
135
+ npx ship-safe scan . --sarif # SARIF for GitHub
216
136
 
217
- Audit your dependencies for known CVEs using the project's native package manager.
137
+ # Security health score (0-100, A-F)
138
+ npx ship-safe score .
218
139
 
219
- ```bash
220
- # Audit dependencies
140
+ # Dependency CVE audit
221
141
  npx ship-safe deps .
222
-
223
- # Also run the package manager's auto-fix command
224
- npx ship-safe deps . --fix
142
+ npx ship-safe deps . --fix # Auto-fix vulnerabilities
225
143
  ```
226
144
 
227
- **Supported package managers:**
228
- - `npm` → `npm audit`
229
- - `yarn` → `yarn audit`
230
- - `pnpm` → `pnpm audit`
231
- - `pip` → `pip-audit` (install with `pip install pip-audit`)
232
- - `bundler` → `bundle-audit` (install with `gem install bundler-audit`)
233
-
234
- Auto-detected from your lock file. Gracefully skips if the tool isn't installed.
235
-
236
- ---
237
-
238
- ### `npx ship-safe score [path]`
239
-
240
- Compute a 0–100 security health score for your project. Combines secret detection, code vulnerability detection, and dependency CVEs into a single grade. No API key needed — instant and free.
145
+ ### AI-Powered Commands
241
146
 
242
147
  ```bash
243
- # Score the project
244
- npx ship-safe score .
245
-
246
- # Skip dependency audit (faster)
247
- npx ship-safe score . --no-deps
248
- ```
249
-
250
- **Scoring (starts at 100):**
251
-
252
- | Category | Critical | High | Medium | Cap |
253
- |----------|----------|------|--------|-----|
254
- | Secrets | −25 | −15 | −5 | −40 |
255
- | Code Vulns | −20 | −10 | −3 | −30 |
256
- | Dependencies | −20 | −10 | −5 | −30 |
257
-
258
- **Grades:**
259
-
260
- | Score | Grade | Verdict |
261
- |-------|-------|---------|
262
- | 90–100 | A | Ship it! |
263
- | 75–89 | B | Minor issues to review |
264
- | 60–74 | C | Fix before shipping |
265
- | 40–59 | D | Significant security risks |
266
- | 0–39 | F | Not safe to ship |
267
-
268
- **Exit codes:** Returns `0` for A/B (≥ 75), `1` for C/D/F.
148
+ # AI audit: scan + classify with Claude + auto-fix secrets
149
+ npx ship-safe agent .
269
150
 
270
- ---
151
+ # Auto-fix hardcoded secrets: rewrite code + write .env
152
+ npx ship-safe remediate .
271
153
 
272
- ### `npx ship-safe checklist`
154
+ # Revoke exposed keys — opens provider dashboards
155
+ npx ship-safe rotate .
156
+ ```
273
157
 
274
- Interactive 10-point security checklist for launch day.
158
+ ### Infrastructure Commands
275
159
 
276
160
  ```bash
277
- # Interactive mode (prompts for each item)
278
- npx ship-safe checklist
279
-
280
- # Print checklist without prompts
281
- npx ship-safe checklist --no-interactive
282
- ```
283
-
284
- Covers: exposed .git folders, debug mode, RLS policies, hardcoded keys, HTTPS, security headers, rate limiting, and more.
161
+ # Continuous monitoring (watch files for changes)
162
+ npx ship-safe watch .
285
163
 
286
- ---
164
+ # Generate CycloneDX SBOM
165
+ npx ship-safe sbom .
287
166
 
288
- ### `npx ship-safe init`
167
+ # Policy-as-code (enforce minimum score, fail on severity)
168
+ npx ship-safe policy init
289
169
 
290
- Initialize security configs in your project.
170
+ # Block git push if secrets found
171
+ npx ship-safe guard
291
172
 
292
- ```bash
293
- # Add all security configs
173
+ # Initialize security configs (.gitignore, headers)
294
174
  npx ship-safe init
295
175
 
296
- # Only add .gitignore patterns
297
- npx ship-safe init --gitignore
298
-
299
- # Only add security headers config
300
- npx ship-safe init --headers
176
+ # Launch-day security checklist
177
+ npx ship-safe checklist
301
178
 
302
- # Force overwrite existing files
303
- npx ship-safe init -f
179
+ # MCP server for AI editors (Claude Desktop, Cursor, etc.)
180
+ npx ship-safe mcp
304
181
  ```
305
182
 
306
- **What it copies:**
307
- - `.gitignore` - Patterns to prevent committing secrets
308
- - `security-headers.config.js` - Drop-in Next.js security headers
309
-
310
183
  ---
311
184
 
312
- ### `npx ship-safe fix`
185
+ ## Claude Code Plugin
313
186
 
314
- Scan for secrets and auto-generate a `.env.example` file.
187
+ Use Ship Safe directly inside Claude Code — no CLI needed:
315
188
 
316
189
  ```bash
317
- # Scan and generate .env.example
318
- npx ship-safe fix
319
-
320
- # Preview what would be generated without writing it
321
- npx ship-safe fix --dry-run
190
+ claude plugin add github:asamassekou10/ship-safe
322
191
  ```
323
192
 
324
- ---
325
-
326
- ### `npx ship-safe guard`
327
-
328
- Install a git hook that blocks pushes if secrets are found. Works with or without Husky.
329
-
330
- ```bash
331
- # Install pre-push hook (runs scan before every git push)
332
- npx ship-safe guard
333
-
334
- # Install pre-commit hook instead
335
- npx ship-safe guard --pre-commit
336
-
337
- # Remove installed hooks
338
- npx ship-safe guard remove
339
- ```
193
+ | Command | Description |
194
+ |---------|-------------|
195
+ | `/ship-safe` | Full security audit — 12 agents, remediation plan, auto-fix |
196
+ | `/ship-safe-scan` | Quick scan for leaked secrets |
197
+ | `/ship-safe-score` | Security health score (0-100) |
340
198
 
341
- **Suppress false positives:**
342
- - Add `# ship-safe-ignore` as a comment on a line to skip it
343
- - Create `.ship-safeignore` (gitignore syntax) to exclude paths
199
+ Claude interprets the results, explains findings in plain language, and can fix issues directly in your codebase.
344
200
 
345
201
  ---
346
202
 
347
- ### `npx ship-safe mcp`
203
+ ## Incremental Scanning
348
204
 
349
- Start ship-safe as an MCP server so AI editors can call it directly.
205
+ Ship Safe caches file hashes and findings in `.ship-safe/context.json`. On subsequent runs, only changed files are re-scanned unchanged files reuse cached results.
350
206
 
351
- **Setup (Claude Desktop)** — add to `claude_desktop_config.json`:
352
- ```json
353
- {
354
- "mcpServers": {
355
- "ship-safe": {
356
- "command": "npx",
357
- "args": ["ship-safe", "mcp"]
358
- }
359
- }
360
- }
207
+ ```
208
+ ✔ [Phase 1/4] Secrets: 41 found (0 changed, 313 cached)
361
209
  ```
362
210
 
363
- Works with Claude Desktop, Cursor, Windsurf, Zed, and any MCP-compatible editor.
211
+ - **~40% faster** on repeated scans
212
+ - **Auto-invalidation** — cache expires after 24 hours or when ship-safe updates
213
+ - **`--no-cache`** — force a full rescan anytime
364
214
 
365
- **Available tools:**
366
- - `scan_secrets` — scan a directory for leaked secrets
367
- - `get_checklist` — return the security checklist as structured data
368
- - `analyze_file` — analyze a single file for issues
215
+ The cache is stored in `.ship-safe/` which is automatically excluded from scans.
369
216
 
370
217
  ---
371
218
 
372
- ## What's Inside
373
-
374
- ### [`/checklists`](./checklists)
375
- **Manual security audits you can do in 5 minutes.**
376
- - [Launch Day Checklist](./checklists/launch-day.md) - 10 things to check before you go live
377
-
378
- ### [`/configs`](./configs)
379
- **Secure defaults for popular stacks. Drop-in ready.**
380
-
381
- | Stack | Files |
382
- |-------|-------|
383
- | **Next.js** | [Security Headers](./configs/nextjs-security-headers.js) - CSP, X-Frame-Options, HSTS |
384
- | **Supabase** | [RLS Templates](./configs/supabase/rls-templates.sql) \| [Security Checklist](./configs/supabase/security-checklist.md) \| [Secure Client](./configs/supabase/secure-client.ts) |
385
- | **Firebase** | [Firestore Rules](./configs/firebase/firestore-rules.txt) \| [Storage Rules](./configs/firebase/storage-rules.txt) \| [Security Checklist](./configs/firebase/security-checklist.md) |
386
-
387
- ### [`/snippets`](./snippets)
388
- **Copy-paste code blocks for common security patterns.**
219
+ ## Smart `.gitignore` Handling
389
220
 
390
- | Category | Files |
391
- |----------|-------|
392
- | **Rate Limiting** | [Upstash Redis](./snippets/rate-limiting/upstash-ratelimit.ts) \| [Next.js Middleware](./snippets/rate-limiting/nextjs-middleware.ts) |
393
- | **Authentication** | [JWT Security Checklist](./snippets/auth/jwt-checklist.md) |
394
- | **API Security** | [CORS Config](./snippets/api-security/cors-config.ts) \| [Input Validation](./snippets/api-security/input-validation.ts) \| [API Checklist](./snippets/api-security/api-security-checklist.md) |
395
-
396
- ### [`/ai-defense`](./ai-defense)
397
- **Protect your AI features from abuse and cost explosions.**
221
+ Ship Safe respects your `.gitignore` for build output, caches, and vendor directories — but **always scans security-sensitive files** even if gitignored:
398
222
 
399
- | File | Description |
400
- |------|-------------|
401
- | [LLM Security Checklist](./ai-defense/llm-security-checklist.md) | Based on OWASP LLM Top 10 - prompt injection, data protection, scope control |
402
- | [Prompt Injection Patterns](./ai-defense/prompt-injection-patterns.js) | Regex patterns to detect 25+ injection attempts |
403
- | [Cost Protection Guide](./ai-defense/cost-protection.md) | Prevent $50k surprise bills - rate limits, budget caps, circuit breakers |
404
- | [System Prompt Armor](./ai-defense/system-prompt-armor.md) | Template for hardened system prompts |
223
+ | Skipped (gitignore respected) | Always scanned (gitignore overridden) |
224
+ |-------------------------------|---------------------------------------|
225
+ | `node_modules/`, `dist/`, `build/` | `.env`, `.env.local`, `.env.production` |
226
+ | `*.log`, `*.pkl`, vendor dirs | `*.pem`, `*.key`, `*.p12` |
227
+ | Cache directories, IDE files | `credentials.json`, `*.secret` |
405
228
 
406
- ### [`/scripts`](./scripts)
407
- **Automated scanning tools. Run them in CI or locally.**
408
- - [Secret Scanner](./scripts/scan_secrets.py) - Python version of the secret scanner
229
+ Why? Files like `.env` are gitignored *because* they contain secrets — which is exactly what a security scanner should catch.
409
230
 
410
231
  ---
411
232
 
412
- ## AI/LLM Security
233
+ ## Multi-LLM Support
413
234
 
414
- Building with AI? Don't let it bankrupt you or get hijacked.
235
+ Ship Safe supports multiple AI providers for classification:
415
236
 
416
- ### Quick Setup
237
+ | Provider | Env Variable | Model |
238
+ |----------|-------------|-------|
239
+ | **Anthropic** | `ANTHROPIC_API_KEY` | claude-haiku-4-5 |
240
+ | **OpenAI** | `OPENAI_API_KEY` | gpt-4o-mini |
241
+ | **Google** | `GOOGLE_AI_API_KEY` | gemini-2.0-flash |
242
+ | **Ollama** | `OLLAMA_HOST` | Local models |
417
243
 
418
- ```typescript
419
- import { containsInjectionAttempt } from './ai-defense/prompt-injection-patterns';
420
-
421
- async function handleChat(userInput: string) {
422
- // 1. Check for injection attempts
423
- const { detected } = containsInjectionAttempt(userInput);
424
- if (detected) {
425
- return "I can't process that request.";
426
- }
427
-
428
- // 2. Rate limit per user
429
- const { success } = await ratelimit.limit(userId);
430
- if (!success) {
431
- return "Too many requests. Please slow down.";
432
- }
433
-
434
- // 3. Check budget before calling
435
- await checkUserBudget(userId, estimatedCost);
436
-
437
- // 4. Make the API call with token limits
438
- const response = await openai.chat.completions.create({
439
- model: 'gpt-4',
440
- messages,
441
- max_tokens: 500, // Hard cap
442
- });
443
-
444
- return response;
445
- }
446
- ```
447
-
448
- ### Cost Protection Layers
449
-
450
- 1. **Token limits** - Cap input/output per request
451
- 2. **Rate limits** - Cap requests per user (10/min)
452
- 3. **Budget caps** - Daily ($1) and monthly ($10) per user
453
- 4. **Circuit breaker** - Disable AI when global budget hit
454
- 5. **Provider limits** - Set hard limits in OpenAI/Anthropic dashboard
455
-
456
- [Full cost protection guide →](./ai-defense/cost-protection.md)
244
+ Auto-detected from environment variables. No API key required for scanning — AI is optional.
457
245
 
458
246
  ---
459
247
 
460
- ## Database Security
248
+ ## Scoring System
461
249
 
462
- ### Supabase RLS Templates
250
+ Starts at 100. Each finding deducts points by severity and category.
463
251
 
464
- ```sql
465
- -- Users can only see their own data
466
- CREATE POLICY "Users own their data" ON items
467
- FOR ALL USING (auth.uid() = user_id);
252
+ **8 Categories** (with weight caps):
468
253
 
469
- -- Read-only public data
470
- CREATE POLICY "Public read access" ON public_items
471
- FOR SELECT USING (true);
472
- ```
473
-
474
- [6 more RLS patterns →](./configs/supabase/rls-templates.sql)
475
-
476
- ### Firebase Security Rules
254
+ | Category | Weight | Critical | High | Medium | Cap |
255
+ |----------|--------|----------|------|--------|-----|
256
+ | Secrets | 15% | -25 | -15 | -5 | -15 |
257
+ | Code Vulnerabilities | 15% | -20 | -10 | -3 | -15 |
258
+ | Dependencies | 15% | -20 | -10 | -5 | -15 |
259
+ | Auth & Access Control | 15% | -20 | -10 | -3 | -15 |
260
+ | Configuration | 10% | -15 | -8 | -3 | -10 |
261
+ | Supply Chain | 10% | -15 | -8 | -3 | -10 |
262
+ | API Security | 10% | -15 | -8 | -3 | -10 |
263
+ | AI/LLM Security | 10% | -15 | -8 | -3 | -10 |
477
264
 
478
- ```javascript
479
- // Users can only access their own documents
480
- match /users/{userId} {
481
- allow read, write: if request.auth != null
482
- && request.auth.uid == userId;
483
- }
484
- ```
265
+ **Grades:** A (90-100), B (75-89), C (60-74), D (40-59), F (0-39)
485
266
 
486
- [Full Firestore rules template →](./configs/firebase/firestore-rules.txt)
267
+ **Exit codes:** `0` for A/B (>= 75), `1` for C/D/F — use in CI to fail builds.
487
268
 
488
269
  ---
489
270
 
490
- ## API Security
271
+ ## Policy-as-Code
491
272
 
492
- ### CORS (Don't use `*` in production)
273
+ Create `.ship-safe.policy.json` to enforce team-wide security standards:
493
274
 
494
- ```typescript
495
- const ALLOWED_ORIGINS = [
496
- 'https://yourapp.com',
497
- 'https://www.yourapp.com',
498
- ];
499
-
500
- // Only allow specific origins
501
- if (origin && ALLOWED_ORIGINS.includes(origin)) {
502
- headers['Access-Control-Allow-Origin'] = origin;
503
- }
275
+ ```bash
276
+ npx ship-safe policy init
504
277
  ```
505
278
 
506
- [CORS configs for Next.js, Express, Fastify, Hono →](./snippets/api-security/cors-config.ts)
507
-
508
- ### Input Validation (Zod)
509
-
510
- ```typescript
511
- const createUserSchema = z.object({
512
- email: z.string().email().max(255),
513
- password: z.string().min(8).max(128),
514
- });
515
-
516
- const result = createUserSchema.safeParse(body);
517
- if (!result.success) {
518
- return Response.json({ error: result.error.issues }, { status: 400 });
279
+ ```json
280
+ {
281
+ "minimumScore": 70,
282
+ "failOn": "critical",
283
+ "requiredScans": ["secrets", "injection", "deps", "auth"],
284
+ "ignoreRules": [],
285
+ "customSeverityOverrides": {},
286
+ "maxAge": { "criticalCVE": "7d", "highCVE": "30d", "mediumCVE": "90d" }
519
287
  }
520
288
  ```
521
289
 
522
- [Full validation patterns →](./snippets/api-security/input-validation.ts)
523
-
524
290
  ---
525
291
 
526
292
  ## CI/CD Integration
527
293
 
528
- Add to your GitHub Actions workflow:
529
-
530
294
  ```yaml
531
295
  # .github/workflows/security.yml
532
- name: Security Scan
296
+ name: Security Audit
533
297
 
534
298
  on: [push, pull_request]
535
299
 
@@ -539,60 +303,70 @@ jobs:
539
303
  steps:
540
304
  - uses: actions/checkout@v4
541
305
 
542
- - name: Scan for secrets and code vulnerabilities
543
- run: npx ship-safe scan . --json
306
+ - name: Full security audit
307
+ run: npx ship-safe audit . --no-ai --json
544
308
 
545
- - name: Audit dependencies for CVEs
546
- run: npx ship-safe deps .
309
+ - name: Upload SARIF to GitHub Security tab
310
+ run: npx ship-safe audit . --no-ai --sarif > results.sarif
547
311
 
548
- - name: Security health score (fail if C or below)
549
- run: npx ship-safe score . --no-deps
312
+ - uses: github/codeql-action/upload-sarif@v3
313
+ with:
314
+ sarif_file: results.sarif
550
315
  ```
551
316
 
552
- Each command exits with code `1` on findings, failing your build. Use `--sarif` with `scan` to send results to GitHub's Security tab:
317
+ ---
553
318
 
554
- ```yaml
555
- - name: Scan (SARIF for GitHub Security tab)
556
- run: npx ship-safe scan . --sarif > results.sarif
319
+ ## Suppress False Positives
557
320
 
558
- - name: Upload to GitHub Security tab
559
- uses: github/codeql-action/upload-sarif@v3
560
- with:
561
- sarif_file: results.sarif
321
+ **Inline:** Add `# ship-safe-ignore` comment on a line:
322
+ ```python
323
+ password = get_password() # ship-safe-ignore
324
+ ```
325
+
326
+ **File-level:** Create `.ship-safeignore` (gitignore syntax):
327
+ ```gitignore
328
+ # Exclude test fixtures
329
+ tests/fixtures/
330
+ *.test.js
331
+
332
+ # Exclude documentation with code examples
333
+ docs/
562
334
  ```
563
335
 
564
336
  ---
565
337
 
566
- ## The 5-Minute Security Checklist
338
+ ## OWASP Coverage
567
339
 
568
- 1. Run `npx ship-safe agent .` — AI audit: finds + classifies + fixes secrets and code vulns
569
- 2. ✅ Run `npx ship-safe deps .` — audit your dependencies for known CVEs
570
- 3. Run `npx ship-safe score .` check your overall security health score
571
- 4. Run `npx ship-safe init` add security configs (.gitignore, security headers)
572
- 5. Run `npx ship-safe guard` install git hook to block pushes if secrets found
573
- 6. Run `npx ship-safe checklist` run the interactive launch-day security checklist
574
- 7. ✅ If using AI features, implement [cost protection](./ai-defense/cost-protection.md)
575
- 8. ✅ If using Supabase, check the [RLS checklist](./configs/supabase/security-checklist.md)
576
- 9. ✅ If using Firebase, check the [Firebase checklist](./configs/firebase/security-checklist.md)
340
+ | Standard | Coverage |
341
+ |----------|----------|
342
+ | **OWASP Top 10 Web 2025** | A01-A10: Broken Access Control, Cryptographic Failures, Injection, Insecure Design, Security Misconfiguration, Vulnerable Components, Auth Failures, Data Integrity, Logging Failures, SSRF |
343
+ | **OWASP Top 10 Mobile 2024** | M1-M10: Improper Credential Usage, Inadequate Supply Chain, Insecure Auth, Insufficient Validation, Insecure Communication, Inadequate Privacy, Binary Protections, Security Misconfiguration, Insecure Data Storage, Insufficient Cryptography |
344
+ | **OWASP LLM Top 10 2025** | LLM01-LLM10: Prompt Injection, Sensitive Info Disclosure, Supply Chain, Data Poisoning, Improper Output Handling, Excessive Agency, System Prompt Leakage, Vector/Embedding Weaknesses, Misinformation, Unbounded Consumption |
345
+ | **OWASP CI/CD Top 10** | CICD-SEC-1 to 10: Insufficient Flow Control, Identity Management, Dependency Chain Abuse, Poisoned Pipeline Execution, Insufficient PBAC, Credential Hygiene, Insecure System Config, Ungoverned Usage, Improper Artifact Integrity, Insufficient Logging |
577
346
 
578
347
  ---
579
348
 
580
- ## Philosophy
349
+ ## What's Inside
581
350
 
582
- - **Low friction** - If it takes more than 5 minutes, people won't do it
583
- - **Educational** - Every config has comments explaining *why*
584
- - **Modular** - Take what you need, ignore the rest
585
- - **Copy-paste friendly** - No complex setup, just grab and go
351
+ ### [`/configs`](./configs)
352
+ Drop-in security configs for Next.js, Supabase, and Firebase.
353
+
354
+ ### [`/snippets`](./snippets)
355
+ Copy-paste security patterns: rate limiting, JWT, CORS, input validation.
356
+
357
+ ### [`/ai-defense`](./ai-defense)
358
+ LLM security: prompt injection detection, cost protection, system prompt hardening.
359
+
360
+ ### [`/checklists`](./checklists)
361
+ Manual security audits: launch-day checklist, framework-specific guides.
586
362
 
587
363
  ---
588
364
 
589
365
  ## Contributing
590
366
 
591
- Found a security pattern that saved your app? Share it!
592
-
593
367
  1. Fork the repo
594
- 2. Add your checklist, config, or script
595
- 3. Include educational comments explaining *why* it matters
368
+ 2. Add your security pattern, agent, or config
369
+ 3. Include comments explaining *why* it matters
596
370
  4. Open a PR
597
371
 
598
372
  See [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines.
@@ -601,11 +375,11 @@ See [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines.
601
375
 
602
376
  ## Security Standards Reference
603
377
 
604
- This toolkit is based on:
605
378
  - [OWASP Top 10 Web 2025](https://owasp.org/Top10/)
606
379
  - [OWASP Top 10 Mobile 2024](https://owasp.org/www-project-mobile-top-10/)
607
380
  - [OWASP LLM Top 10 2025](https://genai.owasp.org/llm-top-10/)
608
381
  - [OWASP API Security Top 10 2023](https://owasp.org/API-Security/)
382
+ - [OWASP CI/CD Top 10](https://owasp.org/www-project-top-10-ci-cd-security-risks/)
609
383
 
610
384
  ---
611
385
 
@@ -621,6 +395,4 @@ MIT - Use it, share it, secure your stuff.
621
395
 
622
396
  ---
623
397
 
624
- **Remember: Security isn't about being paranoid. It's about being prepared.**
625
-
626
- Ship fast. Ship safe.
398
+ **Ship fast. Ship safe.**