不安全的直接對象引用(IDOR)

當(dāng)應(yīng)用程序允許用戶使用對象的直接標(biāo)識(shí)符作為輸入來訪問對象時(shí),就會(huì)發(fā)生此類漏洞。這允許攻擊者跳過授權(quán)。 

例如,假設(shè)用戶可以通過“https://ourpatients.com/userID=1234”路徑訪問自己的醫(yī)療記錄。如果他們可以通過修改用戶 ID 來訪問其他患者的記錄,那么就存在漏洞。 

損壞的對象級(jí)授權(quán) (BOLA)

就像不安全的 IDOR 一樣,損壞的對象級(jí)授權(quán)是一種漏洞,當(dāng) API 暴露帶有對象標(biāo)識(shí)符的端點(diǎn)時(shí)就會(huì)發(fā)生。例如,當(dāng)使用 Gorilla Mux 時(shí),你會(huì)得到如下結(jié)果: 

func main() {

// Init the mux router
router: = mux.NewRouter()

// Route handles & endpoints
// Get all books
router.HandleFunc("/books/", GetBooks).Methods("GET")

// Create a book
router.HandleFunc("/books/", CreateBook).Methods("POST")

// Delete a specific book by the bookID
router.HandleFunc("/books/{bookid}", DeleteBook).Methods("DELETE")

// Delete all books
router.HandleFunc("/books/", DeleteBooks).Methods("DELETE")

// serve the app
fmt.Println("Server at 8080")
log.Fatal(http.ListenAndServe(":8000", router))
}

注意用戶如何根據(jù)自己的 ID 刪除書籍。如果此 ID 被暴露,并且用戶可以通過調(diào)整 URL 中的 ID 來刪除書籍,那么就存在漏洞。 

CORS 配置錯(cuò)誤

跨域資源共享 (CORS)允許外部域訪問受限數(shù)據(jù)。跨域資源共享有時(shí)是必不可少的。例如,托管在另一個(gè)域中的前端應(yīng)用程序可以訪問另一個(gè)域中的后端應(yīng)用程序。 

然而,CORS 通信錯(cuò)誤可能會(huì)導(dǎo)致授權(quán)失敗。例如,如果開發(fā)人員運(yùn)行以下代碼,他們將接受來自所有外部域的請求。

func enableCors(w * http.ResponseWriter) {
( * w).Header().Set("Access-Control-Allow-Origin", "*")
}

這可能構(gòu)成威脅,尤其是當(dāng)攻擊者向應(yīng)用程序發(fā)送惡意請求時(shí)。

預(yù)防 Golang 中的訪問控制中斷

在上一節(jié)中,我們探討了 Golang 中訪問控制失效的不同示例。在本節(jié)中,我們將討論如何防止此類情況發(fā)生。 

CORS 配置

為了防止惡意攻擊者因 CORS 配置錯(cuò)誤而訪問您的應(yīng)用程序,開發(fā)人員需要在配置 CORS 時(shí)考慮安全性。例如,開發(fā)人員可以單獨(dú)授予其應(yīng)用程序訪問權(quán)限,而不是授予每個(gè)外部域訪問權(quán)限。 

例如,如果應(yīng)用程序的前端域是“https://myfrontend.com”,則只應(yīng)授予此域訪問權(quán)限。為此,我們將“*”替換為“https://myfrontend.com”。

func enableCors(w * http.ResponseWriter) {
( * w).Header().Set("Access-Control-Allow-Origin", "https://my frontend.com")
}

緩存控制

雖然緩存非常有用,但開發(fā)人員可以將max-agemust-revalidate作為緩存控制的一部分來實(shí)現(xiàn),以防止出現(xiàn)漏洞。這樣,攻擊者就無法使用他們的計(jì)算機(jī)訪問用戶的信息。開發(fā)人員可以通過將其包含在請求的標(biāo)頭中來做到這一點(diǎn)。 

Cache-Control "max-age=3600, must-revalidate"

防止破壞對象級(jí)授權(quán)和不安全的直接對象引用

許多公司的應(yīng)用程序存在 BOLA 漏洞。為了防止這些漏洞,請采取以下步驟: 

結(jié)論

授權(quán)失效是一種安全漏洞。這是因?yàn)樗褂脩舻膫€(gè)人數(shù)據(jù)容易受到惡意行為者的攻擊。雖然保護(hù)用戶數(shù)據(jù)似乎需要做很多工作,但有些應(yīng)用程序可以幫助管理和監(jiān)控產(chǎn)品的安全性。

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

上一篇:

Angular XML 外部 實(shí)體(XXE)指南: 示例和預(yù)防

下一篇:

動(dòng)態(tài)應(yīng)用程序安全 測試(DAST)工具 概述和指南
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊

多API并行試用

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

查看全部API→
??

熱門場景實(shí)測,選對API

#AI文本生成大模型API

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

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

#AI深度推理大模型API

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

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