Deelvraag 3 - ZAP Security Test Rapport¶
← Terug naar hoofddocument | Deelvraag 3 - Security Test
Dit is de uitgebreide uitwerking van Deelvraag 3: "Welke datalekken en injectie-aanvallen zijn daadwerkelijk mogelijk op de draaiende applicatie van buitenaf?"
In het hoofddocument vind je: Een samenvatting van de resultaten.
Op deze pagina vind je: Alle gevonden ZAP issues, gedetailleerde oplossingen en codevoorbeelden.
Rapport Overzicht¶
Scan Datum: 12 december 2025
Target: http://host.docker.internal:3000
ZAP Versie: 2.16.1
Samenvatting¶
- 0 High/Critical issues
- 3 Medium issues (moet gefixed worden)
- 2 Low issues (leuk om te fixen)
- 1 Informational (meestal false positives)
Medium Prioriteit Issues (Fix Deze)¶
1. Content Security Policy (CSP) Header Niet Ingesteld¶
Risico: Medium | Instances: 6 pagina's
Wat het betekent:
- Je app heeft geen CSP headers
- Kwetsbaar voor XSS (Cross-Site Scripting) aanvallen
- Browsers kunnen geen kwaadaardige script injectie voorkomen
Hoe te fixen:
Voeg toe aan nuxt.config.ts:
export default defineNuxtConfig({
// ... bestaande config
routeRules: {
'/**': {
headers: {
'Content-Security-Policy':
"default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline';"
}
}
}
})
Oplossing: Nuxt Security Module (Aanbevolen)
Het @nuxtjs/security module implementeert OWASP security best practices via HTTP headers. Dit lost automatisch alle security header problemen op:
Installatie:
Configuratie in nuxt.config.ts:
export default defineNuxtConfig({
modules: ['@nuxtjs/security', ...],
security: {
headers: {
contentSecurityPolicy: {
'default-src': ["'self'"],
'script-src': ["'self'", "'unsafe-inline'", "'unsafe-eval'"],
'style-src': ["'self'", "'unsafe-inline'"],
'img-src': ["'self'", "data:", "https:"],
'font-src': ["'self'", "data:"]
},
xFrameOptions: 'DENY',
xContentTypeOptions: 'nosniff',
xXSSProtection: '1; mode=block',
referrerPolicy: 'strict-origin-when-cross-origin'
},
hidePoweredBy: true
}
})
Problemen die dit oplost:
- ZAP Issue 1: CSP Header wordt automatisch toegevoegd
- ZAP Issue 3: X-Frame-Options: DENY wordt automatisch toegevoegd
- ZAP Low Issue: X-Content-Type-Options wordt automatisch toegevoegd
- ZAP Low Issue: X-Powered-By header wordt verwijderd (hidePoweredBy: true)
- OWASP A02: Alle security headers worden centraal beheerd
2. Cross-Domain Misconfiguratie (CORS)¶
Risico: Medium | Instances: 6 endpoints
Wat het betekent:
- Je
/_nuxt/endpoints hebbenAccess-Control-Allow-Origin: * - Dit staat toe dat elke website je resources kan benaderen
- Security risico als gevoelige data wordt blootgesteld
Hoe te fixen:
De CORS waarschuwingen zijn voor Nuxt dev server interne bestanden (/_nuxt/). Deze zijn:
- Veilig in development - Interne Nuxt bestanden
- Moet beperkt worden in productie
Voor productie: Nuxt handelt dit automatisch correct af wanneer gebouwd.
Oplossing voor Spring Boot API CORS:
Wijzig CorsConfig.java om alleen specifieke origins toe te staan:
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOriginPatterns(
"http://localhost:3000", // Development
"https://yourdomain.com" // Production
)
.allowedMethods("GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS")
.allowedHeaders("Authorization", "Content-Type", "Accept")
.allowCredentials(true)
.maxAge(3600);
}
}
Problemen die dit oplost:
- ZAP Issue 2: CORS beperkt tot specifieke origins in plaats van "*"
- OWASP A02: Voorkomt cross-origin data exposure
Opmerking: De CORS waarschuwingen op /_nuxt/ bestanden zijn verwacht in dev mode en veilig.
3. Ontbrekende Anti-clickjacking Header¶
Risico: Medium | Instances: 4 pagina's
Wat het betekent:
- Ontbrekende
X-Frame-Optionsheader - Je pagina's kunnen worden ingebed in iframes op andere sites
- Kwetsbaar voor clickjacking aanvallen
Hoe te fixen:
Voeg toe aan nuxt.config.ts:
export default defineNuxtConfig({
// ... bestaande config
routeRules: {
'/**': {
headers: {
'X-Frame-Options': 'DENY'
}
}
}
})
Oplossing: Nuxt Security Module (Aanbevolen)
Gebruik @nuxtjs/security module - voegt automatisch X-Frame-Options: DENY toe via xFrameOptions: 'DENY' configuratie.
Low Prioriteit Issues (Leuk om te Fixen)¶
4. Server Leakt Informatie via "X-Powered-By" Header¶
Risico: Low | Instances: 7 pagina's
Wat het betekent:
- Response headers bevatten
X-Powered-By: Nuxt - Onthult je tech stack aan aanvallers
- Helpt aanvallers bekende kwetsbaarheden te vinden
Hoe te fixen:
Voeg toe aan nuxt.config.ts:
export default defineNuxtConfig({
// ... bestaande config
routeRules: {
'/**': {
headers: {
'X-Powered-By': '' // Verwijder header
}
}
}
})
Oplossing: Nuxt Security Module (Aanbevolen)
Gebruik @nuxtjs/security module - verwijdert automatisch X-Powered-By header via hidePoweredBy: true configuratie.
5. X-Content-Type-Options Header Ontbreekt¶
Risico: Low | Instances: 12 pagina's
Wat het betekent:
- Ontbrekende
X-Content-Type-Options: nosniffheader - Oudere browsers kunnen bestandstypen verkeerd interpreteren
- Kan leiden tot MIME-sniffing aanvallen
Hoe te fixen:
Voeg toe aan nuxt.config.ts:
Oplossing: Nuxt Security Module (Aanbevolen)
Gebruik @nuxtjs/security module - voegt automatisch X-Content-Type-Options: nosniff toe via xContentTypeOptions: 'nosniff' configuratie.
Informational (Kan Genegeerd Worden)¶
6. Informatie Disclosure - Verdachte Comments¶
Risico: Informational | Instances: 12
Wat het betekent:
- ZAP heeft comments gevonden zoals
<!-- User Profile -->en bestandspaden in dev mode - Dit zijn onschuldige HTML comments en dev server paden
- Veilig om te negeren - dit zijn false positives in development
Opmerking: In productie builds verschijnen deze niet.
Complete Fix (Aanbevolen)¶
Voeg alle security headers tegelijk toe in nuxt.config.ts:
export default defineNuxtConfig({
// ... bestaande config
routeRules: {
'/**': {
headers: {
// Voorkom clickjacking
'X-Frame-Options': 'DENY',
// Voorkom MIME-sniffing
'X-Content-Type-Options': 'nosniff',
// Verberg server info
'X-Powered-By': '',
// Content Security Policy (basis)
'Content-Security-Policy':
"default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:;"
}
}
}
})
Prioriteit Volgorde¶
- Fix Medium issues eerst:
- Voeg X-Frame-Options toe (makkelijk, snelle fix)
- Voeg CSP header toe (belangrijk voor XSS bescherming)
-
Review CORS (meestal dev mode, veilig)
-
Fix dan Low issues:
- Verwijder X-Powered-By header
-
Voeg X-Content-Type-Options toe
-
Negeer Informational:
- Verdachte comments zijn false positives in dev mode
Verwachte Resultaten Na Fixes¶
Na implementatie van de headers:
- Medium issues: 3 → 0
- Low issues: 2 → 0
- Overall security score: Veel verbeterd
Conclusie¶
Deelvraag 3: "Welke datalekken en injectie-aanvallen zijn daadwerkelijk mogelijk op de draaiende applicatie van buitenaf?"
Antwoord op Deelvraag 3¶
De dynamische security tests met OWASP ZAP hebben de volgende bevindingen opgeleverd:
Gevonden kwetsbaarheden (A02 - Security Misconfiguration, Medium severity):
- CSP Header Not Set
- CORS Misconfiguration
- Missing Anti-clickjacking Header
Niet gevonden (goed beschermd):
- SQL Injection: Niet succesvol (JPA gebruikt parameterized queries)
- XSS: Niet succesvol (Vue.js escaped automatisch gebruikersinvoer)
Conclusie: De dynamische tests bevestigen dat injectie-aanvallen (A05) niet succesvol zijn. Echter, er zijn daadwerkelijk exploiteerbare kwetsbaarheden gevonden op het gebied van security configuratie (A02) die kunnen leiden tot datalekken.