
掌握ChatGPT插件與自定義GPT
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")
}
您對在瀏覽器中運行的 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)用程序中的每個操作進行檢查。
最后,我們強調(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