Skip to content

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:

npm install --save-dev @nuxtjs/security

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 hebben Access-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-Options header
  • 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: nosniff header
  • Oudere browsers kunnen bestandstypen verkeerd interpreteren
  • Kan leiden tot MIME-sniffing aanvallen

Hoe te fixen: Voeg toe aan nuxt.config.ts:

routeRules: {
  '/**': {
    headers: {
      'X-Content-Type-Options': 'nosniff'
    }
  }
}

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

  1. Fix Medium issues eerst:
  2. Voeg X-Frame-Options toe (makkelijk, snelle fix)
  3. Voeg CSP header toe (belangrijk voor XSS bescherming)
  4. Review CORS (meestal dev mode, veilig)

  5. Fix dan Low issues:

  6. Verwijder X-Powered-By header
  7. Voeg X-Content-Type-Options toe

  8. Negeer Informational:

  9. 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.


Aanvullende Bronnen