import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {

@RequestMapping("/")
@ResponseBody
public String index() {
return "Greetings from Spring Boot!";
}
}

就是這樣。 

您可以運(yùn)行代碼并轉(zhuǎn)到 localhost:8080 查看您的頁面。

什么是訪問控制?

簡而言之,訪問控制代表一組管理和控制資源訪問的策略和機(jī)制。訪問控制通常也稱為授權(quán)。

一旦服務(wù)器通過登錄或身份驗證機(jī)制確定了您的身份,它就會授予或限制您可以訪問的功能和資源。此外,訪問控制通常用作用戶跟蹤的平臺。

盡管概念簡單,但適當(dāng)?shù)貙嵤┮粋€強(qiáng)大且安全的訪問控制系統(tǒng)卻很困難。訪問控制與系統(tǒng)架構(gòu)緊密相關(guān)。此外,用戶經(jīng)常會扮演多個角色,這使得訪問管理更加復(fù)雜。因此,通常不建議從頭開始開發(fā)訪問控制,而是采用經(jīng)過實踐檢驗的、強(qiáng)大的解決方案,例如OAuth 2.0JWT

訪問控制中斷怎么辦?

破壞的訪問控制包含一組已知漏洞,可能對系統(tǒng)的訪問控制構(gòu)成威脅。 

盡管訪問控制中的許多漏洞一旦被忽視就很容易被利用,但它們可以相對快速地得到解決。這一點很重要,因為訪問控制被破壞的后果可能非常具有破壞性,因為攻擊者可以接管您的系統(tǒng)。

要了解有關(guān)訪問控制的復(fù)雜性的更多信息,請點擊此[鏈接]閱讀我們關(guān)于損壞的訪問控制的深入文章。

訪問控制漏洞

攻擊者可以利用的漏洞有很多,具體取決于您的技術(shù)堆棧和架構(gòu)。不過,為了簡潔起見,我們將僅關(guān)注不安全的 ID、路徑遍歷、文件權(quán)限和客戶端緩存。

不安全身份漏洞

大多數(shù)現(xiàn)代網(wǎng)站都使用某種形式的 ID 或索引來快速高效地引用數(shù)據(jù)。在大多數(shù)情況下,這已經(jīng)足夠了。但是,如果這些 ID 很容易被破解,無論是手動破解還是暴力破解,那么你就有安全問題了。

為了說明這一點,假設(shè)您有一個個人資料頁面部分,服務(wù)器在其中顯示用戶個人資料。然后以下 URL 檢索用戶個人資料。

https://www.mywebsite.com/profile?id=123

現(xiàn)在,如果我手動更改查詢字符串中的數(shù)字,并且沒有主動訪問控制來驗證我的請求,那么我就可以訪問任何配置文件。

路徑遍歷漏洞

路徑遍歷定義了用戶自由瀏覽文件系統(tǒng)目錄樹的能力。?

未實施適當(dāng)訪問控制的系統(tǒng)可能會成為路徑遍歷攻擊的受害者,并允許攻擊者訪問服務(wù)器中的受限資源。當(dāng)系統(tǒng)允許檢索的資源路徑可以被修改且未經(jīng)過充分驗證時,就會發(fā)生這種情況。

為了說明這一點,請看一下以下 URL:

https://www.mywebsite.com/photos?file=user.png

如果我們將“user.png”更改為“../../etc/passwd”之類的內(nèi)容,我們就可以訪問應(yīng)用程序機(jī)密。

文件權(quán)限漏洞

文件權(quán)限漏洞存在于服務(wù)器文件系統(tǒng)的權(quán)限機(jī)制中。 

所有 Web 應(yīng)用程序都包含不應(yīng)被訪問的關(guān)鍵配置文件和資源。然而,如果缺乏適當(dāng)?shù)呐渲貌呗裕粽呔涂梢悦闇?zhǔn)這些文件,從而控制整個平臺。

為了說明這一點,下面是一個嘗試訪問本應(yīng)無法訪問的文件的攻擊示例:

https://www.mywebsite.com/photos?file=../../gradle.json

客戶端緩存漏洞

客戶端緩存漏洞很難解決,因為攻擊者會從物理上接管用戶的計算機(jī)。他們不是進(jìn)行遠(yuǎn)程攻擊,而是利用會話憑據(jù)、緩存頁面或已在經(jīng)過身份驗證的客戶端中存在的瀏覽器中的數(shù)據(jù)。

一旦發(fā)生這種情況,攻擊者就可以快速獲取用戶數(shù)據(jù)。

解決訪問控制問題

緩解訪問控制失效攻擊的第一步是實施強(qiáng)大的身份驗證機(jī)制。在本文中,我們將實施一個簡單的基于表單的登錄機(jī)制來進(jìn)行說明。請?zhí)剿鱆ava和 Spring Boot 社區(qū)中提供的資源,以獲得更深入的實施。

首先,在項目 src/main/java/com/example/demo 目錄中創(chuàng)建一個名為 SecurityConfiguration.java 的文件。

然后添加以下代碼:

package com.example.springboot; 

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

@Override
public void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.formLogin()
.and()
.httpBasic();
}

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("user")
.password("{noop}pass")
.roles("USER");
}
}

如您所見,這本質(zhì)上是一種為身份驗證管理器在內(nèi)存中創(chuàng)建用戶的方法。當(dāng)然,在生產(chǎn)中不建議這樣做,但它可以讓我們快速說明這些概念。

恭喜,您剛剛實現(xiàn)了一種身份驗證機(jī)制。

刷新頁面并檢查。

解決破壞的訪問控制漏洞

為了解決上述特定的漏洞,我們需要對平臺做一些調(diào)整。

不安全的 ID:通過將 GUID 實現(xiàn)為 ID,可以輕松實現(xiàn)此解決方案。您必須盡早考慮到此漏洞來開發(fā)系統(tǒng)。所有 ID(或至少屬于敏感資源的 ID)都必須經(jīng)過混淆且唯一。

路徑遍歷:路徑遍歷緩解需要驗證所有用戶輸入并限制對關(guān)鍵資源的訪問。幸運(yùn)的是,得益于 Spring Security 等庫的強(qiáng)大功能,您無需做太多工作即可實施正確的路徑遍歷策略。

文件權(quán)限:除非您需要修改服務(wù)器權(quán)限并添加與文件操作相關(guān)的功能,否則您無需做太多工作即可保持安全。不過,如果您需要進(jìn)一步的說明,請咨詢您的服務(wù)器管理員。

客戶端緩存:在這種情況下,最有效的解決方案也是最簡單的。不要在客戶端瀏覽器上存儲敏感的用戶信息。但是,如果由于需求而必須嘗試復(fù)雜的功能,請實施適當(dāng)?shù)?HTML 元標(biāo)記和異步驗證以確認(rèn)頁面加載時的權(quán)限。

結(jié)論

據(jù)SDTimes報道,破壞的訪問控制現(xiàn)在是 OWASP Top 10 2021 中最大的漏洞。這種情況應(yīng)該引起開發(fā)人員的關(guān)注。

然而,正如您所看到的,盡管很復(fù)雜,但提供強(qiáng)大的訪問控制卻相對簡單。 

漏洞和攻擊現(xiàn)在比以往任何時候都更加普遍和普遍,確保系統(tǒng)安全是一項越來越復(fù)雜的任務(wù)。盡管如此,我們必須迎接挑戰(zhàn),繼續(xù)開發(fā)這些問題的解決方案。

文章來源:Spring Broken Access Control Guide: Examples and Prevention

上一篇:

Kotlin命令注入:示例及預(yù)防

下一篇:

Angular內(nèi)容安全政策指南:它是什么以及如何啟用它
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊

多API并行試用

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

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

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

25個渠道
一鍵對比試用API 限時免費(fèi)

#AI深度推理大模型API

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

10個渠道
一鍵對比試用API 限時免費(fèi)