{ "account":
{ "account_number": 12345, "balance": { "currency": "usd", "value": 100.00 },
"links":
{ "deposits": "/accounts/12345/deposits",
"withdrawals": "/accounts/12345/withdrawals",
"transfers": "/accounts/12345/transfers",
"close-requests": "/accounts/12345/close-requests" }
}
}

API 端點(diǎn)嗅探

攻擊者獲取敏感信息的另一種方法甚至不需要額外努力去嗅探未記錄的 API 方法。 

如果 API 端點(diǎn)返回的信息超出要求,并且依賴前端開發(fā)人員來(lái)過(guò)濾額外數(shù)據(jù),那基本上意味著對(duì)于這樣的端點(diǎn)(http://domain.com/users/user1),應(yīng)該返回一些基本詳細(xì)信息,如用戶名、電子郵件和上次登錄日期,而服務(wù)器返回其他數(shù)據(jù),如全名和地址。 

服務(wù)器依賴前端開發(fā)人員過(guò)濾掉不需要的信息,并在瀏覽器/應(yīng)用中僅顯示應(yīng)該出現(xiàn)的基本詳細(xì)信息。但是,攻擊者可以使用瀏覽器的開發(fā)人員工具或使用外部工具(如 postman)執(zhí)行 API 請(qǐng)求,并查看服務(wù)器返回的完整數(shù)據(jù)。因此,普通用戶將看到類似這樣的內(nèi)容 

HTTP/1.1 200 OK { "user: 
{ "username": "john doe", "email":"johndoe@gmail.com"  }
{

攻擊者將看到完整的輸出: 

HTTP/1.1 200 OK { "user: 
{ "username": "john doe", "email":"johndoe@gmail.com",
"name: John Doe Smith", "address": "Smith's road 1, NY, NY"  }
{

防止過(guò)度數(shù)據(jù)暴露

什么使數(shù)據(jù)變得敏感以及什么表明數(shù)據(jù)過(guò)度暴露在很大程度上取決于具體情況。在一個(gè) API 中構(gòu)成過(guò)度數(shù)據(jù)的東西在另一個(gè) API 中可能是完全合理的響應(yīng)。 

因此,這意味著自動(dòng)化工具通常無(wú)法幫助您識(shí)別和緩解此漏洞。開發(fā)人員需要加強(qiáng) API 以防范此漏洞。 

漏洞緩解

首先,我將提供一些緩解此漏洞的一般準(zhǔn)則。然后,我將提供一些特定于 Java Spring 的示例。 

1. 永遠(yuǎn)不要依賴前端來(lái)清理數(shù)據(jù)

實(shí)現(xiàn) API 的后端開發(fā)人員應(yīng)該只返回非敏感數(shù)據(jù)。您不應(yīng)該依賴前端來(lái)過(guò)濾掉這些數(shù)據(jù)。

即使前端開發(fā)人員正確地過(guò)濾掉了不需要的數(shù)據(jù),如上所示,攻擊者也可以通過(guò)獨(dú)立訪問(wèn) API 來(lái)訪問(wèn)整個(gè)響應(yīng)。 

在下一節(jié)中,我將提供一個(gè)示例,說(shuō)明如何避免在 Java Spring 的 API 響應(yīng)中返回過(guò)多的數(shù)據(jù)。 

2.保護(hù)需要身份驗(yàn)證和授權(quán)的 API 端點(diǎn)

正如我所描述的,您應(yīng)該使用身份驗(yàn)證和授權(quán)來(lái)保護(hù)每個(gè)返回敏感數(shù)據(jù)的 API 端點(diǎn)。?

3. 不要通過(guò) HATEOS 公開所有 API 端點(diǎn)

如果您將 HATEOS 作為 REST API 的一部分實(shí)現(xiàn),請(qǐng)不要返回整個(gè) API 方法列表。因此,僅返回與特定端點(diǎn)相關(guān)的方法列表。 

Spring Boot

Spring框架是一個(gè)用于創(chuàng)建Web應(yīng)用程序和企業(yè)應(yīng)用程序的卓越Java框架。 

2005 年,Pivotal 開發(fā)了 Spring 框架,至今仍非常流行。自從 Pivotal 開發(fā)了 Spring 框架以來(lái),他們已經(jīng)向核心 Spring 容器添加了各種模塊。 

Spring Boot 是最常用的框架之一,代表了 Spring 框架的約定優(yōu)于配置部分。Spring Boot 讓你可以用極少的配置進(jìn)行編碼。 

緩解 Spring Boot 中的過(guò)度數(shù)據(jù)暴露漏洞

讓我們回到前面討論的用戶端點(diǎn) API 示例: 

HTTP/1.1 200 OK { "user: { "username": "john doe", "email":"johndoe@gmail.com", "name: John Doe Smith", "address": "Smith's road 1, NY, NY" } {

我們可以在 Spring Boot 中使用以下類來(lái)表示它: 

public class User {
    private String username;
    private String email;
    private String fullName;
    private String address;
}

正如我之前提到的,我們希望 API 僅使用用戶名和電子郵件進(jìn)行響應(yīng)。為此,我們可以將屬性添加@JsonIgnore到我們想要在 API 響應(yīng)中排除的字段: 

public class User {
    private String username;
    private String email;
    @JsonIgnore
    private String fullName;
    @JsonIgnore
    private String address;
}

這會(huì)阻止全名和地址出現(xiàn)在響應(yīng)中。 

結(jié)論

API 是許多應(yīng)用程序和網(wǎng)站的支柱。它們?yōu)榭蛻籼峁╆P(guān)鍵服務(wù)。 

過(guò)度數(shù)據(jù)暴露漏洞是一種嚴(yán)重的漏洞,可能對(duì)組織造成安全風(fēng)險(xiǎn)。在這篇文章中,我展示了這種漏洞的利用方式和不同的攻擊媒介。 

同樣,我添加了一些緩解它的標(biāo)準(zhǔn)方法,并針對(duì) Java Spring Boot 提供了一個(gè)具體示例。它成立于 2005 年,是一個(gè)非常流行的創(chuàng)建 Java 后端應(yīng)用程序的框架,并且它仍然是 Java 世界中最流行的框架之一。 

不要依賴前端來(lái)過(guò)濾敏感數(shù)據(jù);相反,手動(dòng)檢查您的端點(diǎn)并確保只返回必要的數(shù)據(jù)。 

此外,避免提供 API 中所有方法的鏈接,除非您正在構(gòu)建 API 文檔,并且通常盡可能強(qiáng)化您的 API。?

文章來(lái)源:Spring Excessive Data Exposure:Examples and Prevention

上一篇:

Java 失效的身份驗(yàn)證指南:示例與預(yù)防

下一篇:

Rails 過(guò)度數(shù)據(jù)暴露:示例與預(yù)防
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

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

查看全部API→
??

熱門場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

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

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

#AI深度推理大模型API

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

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