Address security review notes
- log only the error name for rejected 4xx requests (JSON.parse messages can quote the request body, e.g. a password) - refuse LB_DATABASE_PATH in production; it is test-only - fix two stale file references in the skill texts Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
a7a1595cbf
commit
afd8019a7b
6 changed files with 15 additions and 8 deletions
|
|
@ -21,7 +21,7 @@ fremde Objekte“ (IDOR). Dieser Skill macht die Rechte explizit und testbar.
|
||||||
### 1. Routen und Rollen erfassen
|
### 1. Routen und Rollen erfassen
|
||||||
- Alle Routen auflisten: FastAPI aus `app.openapi()["paths"]` (nicht aus `app.routes`,
|
- Alle Routen auflisten: FastAPI aus `app.openapi()["paths"]` (nicht aus `app.routes`,
|
||||||
eingebundene Router fehlen dort je nach Version), Express aus dem Routen-Inventar der
|
eingebundene Router fehlen dort je nach Version), Express aus dem Routen-Inventar der
|
||||||
Baseline (`tests/security/routes.ts`) oder per `grep -rn "router\.\(get\|post\|put\|patch\|delete\)"`.
|
Baseline (`tests/security/route-inventory.ts`) oder per `grep -rn "router\.\(get\|post\|put\|patch\|delete\)"`.
|
||||||
- Rollen und Identitätsquelle aus dem Code ermitteln (Session, JWT, Proxy-Header, OIDC-Claims).
|
- Rollen und Identitätsquelle aus dem Code ermitteln (Session, JWT, Proxy-Header, OIDC-Claims).
|
||||||
|
|
||||||
### 2. Rollenmatrix aufstellen
|
### 2. Rollenmatrix aufstellen
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# Herkunft
|
# Herkunft
|
||||||
|
|
||||||
Project CodeGuard v1.5.0, https://github.com/cosai-oasis/project-codeguard
|
Project CodeGuard v1.5.0, https://github.com/cosai-oasis/project-codeguard
|
||||||
Lizenz: CC BY 4.0 (siehe LICENSE.md). Aktualisieren mit scripts/update-codeguard.ps1, nicht von Hand aendern.
|
Lizenz: CC BY 4.0 (siehe LICENSE.md). Aktualisieren mit scripts/update-codeguard.ps1 im Repo cj/claude-skills, nicht von Hand aendern.
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ fremde Objekte“ (IDOR). Dieser Skill macht die Rechte explizit und testbar.
|
||||||
### 1. Routen und Rollen erfassen
|
### 1. Routen und Rollen erfassen
|
||||||
- Alle Routen auflisten: FastAPI aus `app.openapi()["paths"]` (nicht aus `app.routes`,
|
- Alle Routen auflisten: FastAPI aus `app.openapi()["paths"]` (nicht aus `app.routes`,
|
||||||
eingebundene Router fehlen dort je nach Version), Express aus dem Routen-Inventar der
|
eingebundene Router fehlen dort je nach Version), Express aus dem Routen-Inventar der
|
||||||
Baseline (`tests/security/routes.ts`) oder per `grep -rn "router\.\(get\|post\|put\|patch\|delete\)"`.
|
Baseline (`tests/security/route-inventory.ts`) oder per `grep -rn "router\.\(get\|post\|put\|patch\|delete\)"`.
|
||||||
- Rollen und Identitätsquelle aus dem Code ermitteln (Session, JWT, Proxy-Header, OIDC-Claims).
|
- Rollen und Identitätsquelle aus dem Code ermitteln (Session, JWT, Proxy-Header, OIDC-Claims).
|
||||||
|
|
||||||
### 2. Rollenmatrix aufstellen
|
### 2. Rollenmatrix aufstellen
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# Herkunft
|
# Herkunft
|
||||||
|
|
||||||
Project CodeGuard v1.5.0, https://github.com/cosai-oasis/project-codeguard
|
Project CodeGuard v1.5.0, https://github.com/cosai-oasis/project-codeguard
|
||||||
Lizenz: CC BY 4.0 (siehe LICENSE.md). Aktualisieren mit scripts/update-codeguard.ps1, nicht von Hand aendern.
|
Lizenz: CC BY 4.0 (siehe LICENSE.md). Aktualisieren mit scripts/update-codeguard.ps1 im Repo cj/claude-skills, nicht von Hand aendern.
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,15 @@
|
||||||
import path from "node:path";
|
import path from "node:path";
|
||||||
import { createDatabaseContext } from "./database-context.js";
|
import { createDatabaseContext } from "./database-context.js";
|
||||||
|
|
||||||
// LB_DATABASE_PATH ist nur fuer Tests gedacht (z. B. ":memory:" in tests/security);
|
// LB_DATABASE_PATH ist nur fuer Tests gedacht (z. B. ":memory:" in tests/security).
|
||||||
// der Betrieb nutzt weiterhin data/leistungsbilanz.db.
|
// Migrationen, Backup und Schema-Pruefung nutzen fest data/leistungsbilanz.db, deshalb
|
||||||
|
// ist die Variable in Produktion verboten.
|
||||||
|
const testDatabasePath = process.env.LB_DATABASE_PATH;
|
||||||
|
if (testDatabasePath && process.env.NODE_ENV === "production") {
|
||||||
|
throw new Error("LB_DATABASE_PATH is test-only and must not be set in production.");
|
||||||
|
}
|
||||||
const defaultDatabaseContext = createDatabaseContext(
|
const defaultDatabaseContext = createDatabaseContext(
|
||||||
process.env.LB_DATABASE_PATH || path.resolve("data", "leistungsbilanz.db")
|
testDatabasePath || path.resolve("data", "leistungsbilanz.db")
|
||||||
);
|
);
|
||||||
|
|
||||||
export const db = defaultDatabaseContext.db;
|
export const db = defaultDatabaseContext.db;
|
||||||
|
|
|
||||||
|
|
@ -24,11 +24,13 @@ export function errorMiddleware(
|
||||||
) {
|
) {
|
||||||
const status = clientErrorStatus(error);
|
const status = clientErrorStatus(error);
|
||||||
if (status !== undefined) {
|
if (status !== undefined) {
|
||||||
|
// No error message here: JSON.parse messages can quote parts of the body
|
||||||
|
// (for example a password from a malformed login request).
|
||||||
logger.warn("request rejected", {
|
logger.warn("request rejected", {
|
||||||
method: req.method,
|
method: req.method,
|
||||||
path: req.originalUrl,
|
path: req.originalUrl,
|
||||||
status,
|
status,
|
||||||
...toErrorMeta(error),
|
errorName: error instanceof Error ? error.name : typeof error,
|
||||||
});
|
});
|
||||||
res.status(status).json({ error: "Ungültige Anfrage." });
|
res.status(status).json({ error: "Ungültige Anfrage." });
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue