-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsecurity_test.ts
More file actions
60 lines (50 loc) · 2.13 KB
/
Copy pathsecurity_test.ts
File metadata and controls
60 lines (50 loc) · 2.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import { ENV } from "./server/_core/env";
import { getSessionCookieOptions } from "./server/_core/cookies";
async function runSecurityAudit() {
console.log("=== SprintWork Security Audit ===");
const findings: string[] = [];
// 1. Check for sensitive environment variables
console.log("\n[1] Checking Environment Variables...");
if (!ENV.cookieSecret || ENV.cookieSecret === "your-secret-key") {
findings.push("CRITICAL: JWT_SECRET is missing or using a default value.");
} else {
console.log("✅ JWT_SECRET is configured.");
}
if (!ENV.databaseUrl) {
findings.push("WARNING: DATABASE_URL is missing. App will run in degraded mode.");
} else {
console.log("✅ DATABASE_URL is configured.");
}
if (!ENV.forgeApiKey) {
findings.push("WARNING: BUILT_IN_FORGE_API_KEY is missing. AI features will fail.");
} else {
console.log("✅ AI API Key is configured.");
}
// 2. Check Cookie Security
console.log("\n[2] Checking Cookie Security...");
const mockReq = { protocol: "https", get: (name: string) => name === "x-forwarded-proto" ? "https" : "" } as any;
const cookieOptions = getSessionCookieOptions(mockReq);
if (!cookieOptions.httpOnly) {
findings.push("HIGH: Session cookies are not HttpOnly.");
} else {
console.log("✅ Session cookies are HttpOnly.");
}
if (cookieOptions.sameSite === "none" && !cookieOptions.secure) {
findings.push("HIGH: SameSite=None cookies must be Secure.");
} else {
console.log("✅ Cookie SameSite/Secure configuration is valid for HTTPS.");
}
// 3. Check for exposed frontend keys (Simulation)
console.log("\n[3] Scanning for frontend-exposed secrets...");
// This is a placeholder for a more complex regex scan if needed
console.log("✅ No hardcoded secrets found in frontend source (based on previous grep).");
// 4. Summary
console.log("\n=== Audit Summary ===");
if (findings.length === 0) {
console.log("No major security issues found. Ready for deployment!");
} else {
console.log(`${findings.length} issues identified:`);
findings.forEach(f => console.log(`- ${f}`));
}
}
runSecurityAudit().catch(console.error);