Skip to content
This repository has been archived by the owner on Mar 26, 2024. It is now read-only.

Sikkerhet

Ole Kristian Aune edited this page Jan 29, 2017 · 8 revisions

Vi har forholdt oss til sikkerhetsanbefalingene til OWASP, mer nøyaktig deres topp 10-liste over sikkerhetsrisikoer.

A1 - Injection

Vårt system kjører spørringer opp mot en MySQL-tjener, og vi kan da være eksponert for A1.

  • Det er kun DBManager-klassene i backend-koden vår som har direkte tilgang til databasen
  • Vi har sørget for at alle spørringer mot databasen blir kjørt gjennom prepared statements (PreparedStatement), der all inndata er pakket inn i parametre. Ved dette sikrer vi oss mot alt av forutsigbare SQL-injeksjoner. Vårt system kjører ingen andre typer kommandoer som kan eksponeres for slike injeksjoner.

A2 - Broken Authentication and Session Management

Vårt system inkluderer brukerinnlogging og sesjoner, og vi kan da være eksponert for A2.

  • Våre passord oppfyller kravet definert i visjonsdokumentet (Dette blir validert både client-side og server-side)
  • Passordene blir hashet sammen med en salt, og kun hash og salt lagres i database
  • Vi bruker Java EEs innebygde sesjonshåndtering, dvs. det lages en JSESSIONID-cookie som ikke kan aksesseres fra JavaScript (HttpOnly)
  • Sesjoner har utløpstid, både client-side (sessionStorage) og server-side
  • Når en bruker logges ut, slettes sesjonstokenen

A3 - Cross-Site Scripting (XSS)

Vårt system tar inn inndata fra brukere, og vi kan da være eksponert for A3.

  • Servleten er stilt inn til å legge til HTTP-headere som instruerer nettlesere til å filtrere XSS-forsøk (OWASP-headere)
  • Alle strenger som sendes til REST-endpointene blir filtrert for HTML

A4 - Insecure Direct Object References

Vårt system har REST-endpointer som inneholder reelle navn/nøkler, og vi kan da være eksponert for A4.

  • Alle REST-endpoints sjekker om klienten har tilstrekkelig autorisasjon for å få tilgang til ressursen. En bruker vil derfor ikke kunne manipulere URL for å få tilgang til ressursen ment for andre
  • Hvis en bruker skal aksessere noe som har direkte tilkobling til en selv, bestemmes dette av sesjonen, og ikke inndata. Et eksempel er REST-kallet for å få egne vakter: Det er /shift, og ikke /shift/{minId}

A5 - Security Misconfiguration

Så og si alle system er eksponert for A5, og vårt system er ikke mer enn andre.

  • Vi har prøvd å bruke oppdaterte versjoner av alle våre Maven-avhengigheter
  • I produksjonsmiljø ville man ha skrudd av utviklingsfunksjoner som f.eks. stacktrace i nettleser

A6 - Sensitive Data Exposure

__Vårt system lagrer ikke noen sensitiv informasjon. For passord, se A2

  • I produksjonsmiljø ville systemet kjørt med SSL over HTTPS

A7 - Missing Function Level Access Control

Se A4 punkt nr. 2

A8 - Cross-Site Request Forgery (CSRF)

__Vi har ikke implementert noen form for CSRF-token, da dette kan være omfattende

A9 - Using Components with Known Vulnerabilities

  • Vi har prøvd å bruke oppdaterte versjoner av alle våre Maven-avhengigheter

A10 - Unvalidated Redirects and Forwards

Vårt system har ikke redirect/forward som kan bestemmes direkte av inndata, og er derfor sikret for disse typer angrep.