
如何免費調用有道翻譯API實現多語言翻譯
當應用程序允許用戶使用對象的直接標識符作為輸入來訪問對象時,就會發生此類漏洞。這允許攻擊者跳過授權。
例如,假設用戶可以通過“https://ourpatients.com/userID=1234”路徑訪問自己的醫療記錄。如果他們可以通過修改用戶 ID 來訪問其他患者的記錄,那么就存在漏洞。
就像不安全的 IDOR 一樣,損壞的對象級授權是一種漏洞,當 API 暴露帶有對象標識符的端點時就會發生。例如,當使用 Gorilla Mux 時,你會得到如下結果:
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))
}
注意用戶如何根據自己的 ID 刪除書籍。如果此 ID 被暴露,并且用戶可以通過調整 URL 中的 ID 來刪除書籍,那么就存在漏洞。
跨域資源共享 (CORS)允許外部域訪問受限數據。跨域資源共享有時是必不可少的。例如,托管在另一個域中的前端應用程序可以訪問另一個域中的后端應用程序。
然而,CORS 通信錯誤可能會導致授權失敗。例如,如果開發人員運行以下代碼,他們將接受來自所有外部域的請求。
func enableCors(w * http.ResponseWriter) {
( * w).Header().Set("Access-Control-Allow-Origin", "*")
}
這可能構成威脅,尤其是當攻擊者向應用程序發送惡意請求時。
在上一節中,我們探討了 Golang 中訪問控制失效的不同示例。在本節中,我們將討論如何防止此類情況發生。
為了防止惡意攻擊者因 CORS 配置錯誤而訪問您的應用程序,開發人員需要在配置 CORS 時考慮安全性。例如,開發人員可以單獨授予其應用程序訪問權限,而不是授予每個外部域訪問權限。
例如,如果應用程序的前端域是“https://myfrontend.com”,則只應授予此域訪問權限。為此,我們將“*”替換為“https://myfrontend.com”。
func enableCors(w * http.ResponseWriter) {
( * w).Header().Set("Access-Control-Allow-Origin", "https://my frontend.com")
}
雖然緩存非常有用,但開發人員可以將max-age和must-revalidate作為緩存控制的一部分來實現,以防止出現漏洞。這樣,攻擊者就無法使用他們的計算機訪問用戶的信息。開發人員可以通過將其包含在請求的標頭中來做到這一點。
Cache-Control "max-age=3600, must-revalidate"
許多公司的應用程序存在 BOLA 漏洞。為了防止這些漏洞,請采取以下步驟:
授權失效是一種安全漏洞。這是因為它使用戶的個人數據容易受到惡意行為者的攻擊。雖然保護用戶數據似乎需要做很多工作,但有些應用程序可以幫助管理和監控產品的安全性。
文章來源:Golang Broken Access Control Guide: Examples and Prevention