Problem Statement
The request logger (api/src/middleware/request-logger.middleware.ts) and audit interceptor (api/src/audit/audit.interceptor.ts) log full IP addresses. Under GDPR and similar regulations, IP addresses are personally identifiable information and should be masked by default in production.
Evidence
// request-logger.middleware.ts
const ip = (req.headers["x-forwarded-for"] as string | undefined)?.split(",")[0]?.trim() ?? req.ip ?? null
// audit.interceptor.ts
const ip = (req.headers["x-forwarded-for"] as string) ?? req.ip ?? ""
Impact
Full IP addresses stored in logs and audit records. Potential GDPR compliance issue. No configurable anonymization.
Proposed Solution
Add LOG_IP_MASKING env var (default: "last-octet"). Mask the last octet of IPv4 addresses and the last 64 bits of IPv6 addresses before logging or storing.
Acceptance Criteria
File Map
api/src/middleware/request-logger.middleware.ts — mask IP
api/src/audit/audit.interceptor.ts — mask IP
api/src/config/env.ts — add LOG_IP_MASKING
Labels: observability, security
Priority: Low | Difficulty: Beginner | Estimated Effort: 1h
Labels: observability,security
Priority: Low | Difficulty: Beginner | Estimated Effort: 1h
Backlog ID: REPO-039
Problem Statement
The request logger (
api/src/middleware/request-logger.middleware.ts) and audit interceptor (api/src/audit/audit.interceptor.ts) log full IP addresses. Under GDPR and similar regulations, IP addresses are personally identifiable information and should be masked by default in production.Evidence
Impact
Full IP addresses stored in logs and audit records. Potential GDPR compliance issue. No configurable anonymization.
Proposed Solution
Add
LOG_IP_MASKINGenv var (default:"last-octet"). Mask the last octet of IPv4 addresses and the last 64 bits of IPv6 addresses before logging or storing.Acceptance Criteria
192.168.1.42→192.168.1.0File Map
api/src/middleware/request-logger.middleware.ts— mask IPapi/src/audit/audit.interceptor.ts— mask IPapi/src/config/env.ts— add LOG_IP_MASKINGLabels: observability, security
Priority: Low | Difficulty: Beginner | Estimated Effort: 1h
Labels: observability,security
Priority: Low | Difficulty: Beginner | Estimated Effort: 1h
Backlog ID: REPO-039