class WebConfig : WebMvcConfigurerAdapter() {
override fun addViewControllers(registry: ViewControllerRegistry) {
//Default controller for the login page.
registry.addViewController("/login").setViewName("login")
}
}

然后我們配置Spring Security:

@Configuration
@EnableWebSecurity //Turn on Web Security
class SecurityWebInitializer : WebSecurityConfigurerAdapter(){
override fun configure(http: HttpSecurity) {
http
.authorizeRequests()
//We need to allow anonymous users to
//access the login page (otherwise we get 403)
.antMatchers("/login").anonymous()
.anyRequest().authenticated()
.and()
//Setup a custom login page
.formLogin()
.loginPage("/login")
.usernameParameter("username")
.passwordParameter("password")
.and()
.httpBasic()
}


override fun configure(auth: AuthenticationManagerBuilder) {
//Sets up a user store in memory. Useful for debugging and development
auth
.inMemoryAuthentication()
.withUser("joe")
.password("black")
.roles("USER")
.and()
.withUser("administrator")
.password("administrator")
.roles("USER", "ADMINISTRATOR")
}

哪些類型的應用程序應該使用 CSRF 保護?

 您對在瀏覽器中運行的 Web 應用程序采用 CSRF 保證,您應該期望轉換操作可以由加載應用程序顯示內容的瀏覽器完成。

由于應用程序具有不同的先決條件,因此系統提供的任何實現都應該足以有效地適應不同的場景。 Spring Security 中的 CSRF 安全工具也不例外。 我們僅在接受服務器提供的資源的頁面本身由同一服務器創建時才使用 CSRF 保護。 它可以是一個 Web 應用程序,其中使用的端點由不同的根節點發現。

有時您可能需要自定義 CSRF 令牌的管理。正如您現在所知,默認情況下,應用程序將 CSRF 令牌存儲在服務器端的 HTTP 會話中。HTTP 會話是有狀態的,會降低應用程序的多功能性。假設您需要改變應用程序管理令牌的方式,并將其存儲在數據庫中的某個位置,而不是 HTTP 會話中。Spring Security 提供了兩種方法來執行此操作:

建議

通常,您只需要CsrfToken的實例來將詳細信息存儲在請求的屬性中。CsrfTokenRepository可用于在 Spring Security 中管理 CSRF 令牌。接口CsrfTokenRepository是與管理 CSRF 令牌的組件通信的契約。要更改應用程序管理令牌的方式,您需要實現CsrfTokenRepository接口,該接口允許您將自定義實現插入系統中。

無論如何,在使用此類代幣的網站上可以發現此調整的一些問題。我們在下面列出了其中一些:

注意事項

這些都是此修復程序所展示的問題的幾個案例,因為攻擊者將不斷嘗試破壞強制驗證。

在可能的解決方案中,一種是不可預測的令牌,插入 HTML 表單的隱藏字段中。我們需要在應用服務器上驗證令牌,以此來施加質詢。重要的是,每次我們發出請求時,服務器都會提供一個新令牌。我們將此機制稱為每頁令牌。

我們需要確保這個令牌是唯一的,并且我們會對應用程序中的每個操作進行檢查。

結論

最后,我們強調,實施多層安全措施始終很重要。有動機的攻擊者總是會尋找方法來破壞現有的保護措施。我們建議始終遵循良好的安全做法,評估風險,并盡可能減少攻擊面。

一個很好的初步預防措施是將瀏覽配置文件分開。至少,將您的專業配置文件與個人資料分開很重要。您還可以創建其他配置文件:一個僅用于研究,另一個用于在線購物等。當然,我們必須始終了解我們在設備上安裝和訪問的內容。CSRF 是一個古老的 Web 應用程序安全問題,但仍然會給受害者帶來負面影響。

鑒于我們這一代開發新數字產品的速度很快,考慮安全性變得越來越重要。對于開發人員來說,請記住要考慮應用程序的安全要求和操作要求。

文章來源:Kotlin CSRF Protection Guide: Examples and How to Enable It

上一篇:

Kotlin CORS指南:它是什么如何啟用它

下一篇:

Kotlin HTTP嚴格傳輸安全指南:它是什么以及如何啟用它
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費