| name | security-review |
| description | Bruk før commit, push eller pull request for å sjekke at koden er trygg å merge |
| license | MIT |
| metadata | {"domain":"auth","tags":"security pre-commit vulnerability-scanning code-review"} |
Security Review Skill
Denne skillen gir pre-commit- og pre-PR-sikkerhetssjekker for Nav-applikasjoner. Dekker secret scanning, sårbarhetsskanning og Nav-spesifikke krav.
For arkitekturspørsmål, trusselmodellering eller compliance-avgjørelser, bruk @security-champion i stedet.
Automatiserte skanninger
Kjør med run_in_terminal:
trivy repo .
trivy image <image-name> --severity HIGH,CRITICAL
zizmor .github/workflows/
git log -p --all -S 'password' -- '*.kt' '*.ts' | head -100
git log -p --all -S 'secret' -- '*.kt' '*.ts' | head -100
Parameterisert SQL (aldri konkatener)
fun findBruker(fnr: String): Bruker? =
jdbcTemplate.queryForObject(
"SELECT * FROM bruker WHERE fnr = ?",
brukerRowMapper,
fnr
)
fun findBrukerUnsafe(fnr: String): Bruker? =
jdbcTemplate.queryForObject(
"SELECT * FROM bruker WHERE fnr = '$fnr'",
brukerRowMapper
)
Ingen PII i logg
log.info("Behandler sak for bruker", kv("sakId", sak.id), kv("tema", sak.tema))
log.info("Behandler sak for bruker ${bruker.fnr}")
log.info("Navn: ${bruker.navn}")
Hemmeligheter fra miljø, aldri hardkodet
val dbPassword = System.getenv("DB_PASSWORD")
?: throw IllegalStateException("DB_PASSWORD mangler")
val dbPassword = "supersecret123"
Nettverkspolicy (Nais)
Eksponer kun det som må eksponeres:
spec:
accessPolicy:
inbound:
rules:
- application: frontend-app
outbound:
rules:
- application: pdl-api
namespace: pdl
cluster: prod-gcp
external:
- host: api.external-service.no
OWASP Top 10-sjekker
For fullstendige kodemønstre per kategori (A01 Broken Access Control, A03 Software
Supply Chain, A04 Cryptographic Failures, A05 Injection, A09 Logging osv.) på tvers
av Kotlin/Go/Java/Node.js, se $security-owasp. Denne skillen dekker kun
skanneverktøyene og de repo-generelle sjekkene over.
Filopplasting-sikkerhet
fun validateUpload(file: MultipartFile) {
require(file.size <= 10 * 1024 * 1024) { "File too large (max 10 MB)" }
require(file.contentType in ALLOWED_TYPES) { "Invalid file type" }
val bytes = file.bytes.take(8).toByteArray()
require(verifyMagicBytes(bytes, file.contentType!!)) { "File content does not match type" }
}
private val ALLOWED_TYPES = setOf("application/pdf", "image/png", "image/jpeg")
Avhengighetshåndtering
dependencyManagement {
imports {
mavenBom("org.springframework.boot:spring-boot-dependencies:3.4.1")
}
}
./gradlew dependencyUpdates
./gradlew dependencyCheckAnalyze
trivy repo .
npm audit
npm audit fix
Sikkerhetssjekkliste
Relatert
| Ressurs | Bruk til |
|---|
$security-owasp | OWASP Top 10:2025 kodemønstre per kategori (Kotlin/Go/Java/Node.js) |
@security-champion | Trusselmodellering, compliance-spørsmål, Navs sikkerhetsarkitektur |
@auth-agent | JWT-validering, TokenX, ID-porten, Maskinporten |
@nais-agent | Nais-manifest, accessPolicy, oppsett av hemmeligheter |
| sikkerhet.nav.no | Navs Golden Path, autoritativ sikkerhetsveiledning |