{ "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 端點嗅探

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

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

服務器依賴前端開發人員過濾掉不需要的信息,并在瀏覽器/應用中僅顯示應該出現的基本詳細信息。但是,攻擊者可以使用瀏覽器的開發人員工具或使用外部工具(如 postman)執行 API 請求,并查看服務器返回的完整數據。因此,普通用戶將看到類似這樣的內容 

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"  }
{

防止過度數據暴露

什么使數據變得敏感以及什么表明數據過度暴露在很大程度上取決于具體情況。在一個 API 中構成過度數據的東西在另一個 API 中可能是完全合理的響應。 

因此,這意味著自動化工具通常無法幫助您識別和緩解此漏洞。開發人員需要加強 API 以防范此漏洞。 

漏洞緩解

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

1. 永遠不要依賴前端來清理數據

實現 API 的后端開發人員應該只返回非敏感數據。您不應該依賴前端來過濾掉這些數據。

即使前端開發人員正確地過濾掉了不需要的數據,如上所示,攻擊者也可以通過獨立訪問 API 來訪問整個響應。 

在下一節中,我將提供一個示例,說明如何避免在 Java Spring 的 API 響應中返回過多的數據。 

2.保護需要身份驗證和授權的 API 端點

正如我所描述的,您應該使用身份驗證和授權來保護每個返回敏感數據的 API 端點。?

3. 不要通過 HATEOS 公開所有 API 端點

如果您將 HATEOS 作為 REST API 的一部分實現,請不要返回整個 API 方法列表。因此,僅返回與特定端點相關的方法列表。 

Spring Boot

Spring框架是一個用于創建Web應用程序和企業應用程序的卓越Java框架。 

2005 年,Pivotal 開發了 Spring 框架,至今仍非常流行。自從 Pivotal 開發了 Spring 框架以來,他們已經向核心 Spring 容器添加了各種模塊。 

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

緩解 Spring Boot 中的過度數據暴露漏洞

讓我們回到前面討論的用戶端點 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 中使用以下類來表示它: 

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

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

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

這會阻止全名和地址出現在響應中。 

結論

API 是許多應用程序和網站的支柱。它們為客戶提供關鍵服務。 

過度數據暴露漏洞是一種嚴重的漏洞,可能對組織造成安全風險。在這篇文章中,我展示了這種漏洞的利用方式和不同的攻擊媒介。 

同樣,我添加了一些緩解它的標準方法,并針對 Java Spring Boot 提供了一個具體示例。它成立于 2005 年,是一個非常流行的創建 Java 后端應用程序的框架,并且它仍然是 Java 世界中最流行的框架之一。 

不要依賴前端來過濾敏感數據;相反,手動檢查您的端點并確保只返回必要的數據。 

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

文章來源:Spring Excessive Data Exposure:Examples and Prevention

上一篇:

Java 失效的身份驗證指南:示例與預防

下一篇:

Rails 過度數據暴露:示例與預防
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

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

10個渠道
一鍵對比試用API 限時免費