Skip to content

Commit f79dfdf

Browse files
committed
chore: csrf support
1 parent 07f5680 commit f79dfdf

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

backend/jvm/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ dependencies {
174174
implementation(libs.ktor.server.compression)
175175
implementation(libs.ktor.server.cors)
176176
implementation(libs.ktor.server.hsts)
177+
implementation(libs.ktor.server.csrf)
177178
implementation(libs.ktor.server.rate.limit)
178179
implementation(libs.ktor.server.double.receive)
179180
implementation(libs.ktor.server.host.common)

backend/jvm/src/main/kotlin/dev/suresh/routes/Service.kt

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import io.github.oshai.kotlinlogging.KLogger
1111
import io.github.oshai.kotlinlogging.KotlinLogging
1212
import io.ktor.http.*
1313
import io.ktor.server.application.*
14+
import io.ktor.server.plugins.csrf.CSRF
1415
import io.ktor.server.response.*
1516
import io.ktor.server.routing.*
1617
import io.ktor.server.sessions.*
@@ -36,12 +37,27 @@ fun Routing.services() {
3637
call.respondText("Session created")
3738
}
3839

39-
get("/") {
40+
get {
4041
val session = call.sessions.get<CookieSession>()
4142
call.respondText("Current Session: $session")
4243
}
4344
}
4445

46+
route("/csrf") {
47+
install(CSRF) {
48+
allowOrigin("https://localhost:8080")
49+
originMatchesHost()
50+
checkHeader("X-CSRF") { csrfHeader ->
51+
val originHeader = request.headers[HttpHeaders.Origin]
52+
csrfHeader == originHeader?.hashCode()?.toString(32)
53+
}
54+
55+
onFailure { respondText("Access denied!", status = HttpStatusCode.Forbidden) }
56+
}
57+
58+
post { call.respondText("CSRF check passed!") }
59+
}
60+
4561
wasm()
4662
}
4763

gradle/libs.versions.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,7 @@ ktor-server-call-logging = { module = "io.ktor:ktor-server-call-logg
342342
ktor-server-call-id = { module = "io.ktor:ktor-server-call-id" , version.ref = "ktor"}
343343
ktor-server-cors = { module = "io.ktor:ktor-server-cors" , version.ref = "ktor"}
344344
ktor-server-hsts = { module = "io.ktor:ktor-server-hsts" , version.ref = "ktor"}
345+
ktor-server-csrf = { module = "io.ktor:ktor-server-csrf" , version.ref = "ktor"}
345346
ktor-server-swagger = { module = "io.ktor:ktor-server-swagger" , version.ref = "ktor"}
346347
ktor-server-openapi = { module = "io.ktor:ktor-server-openapi" , version.ref = "ktor"}
347348
ktor-server-http-redirect = { module = "io.ktor:ktor-server-http-redirect" , version.ref = "ktor"}

0 commit comments

Comments
 (0)