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")
}

哪些類型的應(yīng)用程序應(yīng)該使用 CSRF 保護?

 您對在瀏覽器中運行的 Web 應(yīng)用程序采用 CSRF 保證,您應(yīng)該期望轉(zhuǎn)換操作可以由加載應(yīng)用程序顯示內(nèi)容的瀏覽器完成。

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

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

建議

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

無論如何,在使用此類代幣的網(wǎng)站上可以發(fā)現(xiàn)此調(diào)整的一些問題。我們在下面列出了其中一些:

注意事項

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

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

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

結(jié)論

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

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

鑒于我們這一代開發(fā)新數(shù)字產(chǎn)品的速度很快,考慮安全性變得越來越重要。對于開發(fā)人員來說,請記住要考慮應(yīng)用程序的安全要求和操作要求。

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

上一篇:

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

下一篇:

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

我們有何不同?

API服務(wù)商零注冊

多API并行試用

數(shù)據(jù)驅(qū)動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

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

#AI深度推理大模型API

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

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