人人可用的API - 聊聊簡單的API安全

YingYun
·
·
IPFS
·
透過網路資源或是AI輔助,人人都能使用到API,今天就API安全,我複習並整理了一些基本要點,簡單談談新手該有的API的安全意識

事情要從最近說起,我跟一個朋友聊天時,談到了關於生成式AI,他向我分享了近期他用AI做了一個社群聊天機器人......

這之後我就想到一個問題,在透過網路資源學習並開發專案後,很多想進一步學習的人往往都會忽略資訊安全的問題,AI在社群中製作聊天機器人肯定會使用到API,現在網路資源豐富,每一個能操作電腦的人,都能透過影音或圖文等媒介,學習並製作一些專案,加上現在生成式AI得出現,這個現象更為普遍了,關於API方面,有在做專案開發一定會接觸到,自ChatGPT問世以來,肯定有越來越多的人會接觸到API,以式我整理的API安全安全基本知識,最後做出個人總結

先放上一段API的基本說明 :

  • API是應用程序編程接口(Application Programming Interface)的縮寫。它是一組定義了軟件組件如何相互交互和通信的規則和協議。 API允許不同的軟件應用程序之間進行數據交換、功能調用或服務訪問,使它們能夠相互合作。

  • 在軟件開發中,API可以被視為是應用程序提供給其他開發者或系統的門戶,通過該門戶,其他開發者可以與應用程序進行交互。 API可以是操作系統、庫、服務或其他軟件組件的一部分,用於讓開發者在其它應用中調用特定的功能或獲取特定的數據。

  • API的設計和實現有助於促進軟件系統之間的集成、互聯和互操作性。它們為開發者提供了一種標準化的方式來使用其他軟件組件,從而加速應用程序開發過程,並促進了各種應用和服務的快速發展。

附上一張有授權的圖片

示例

簡單來說 : API是一種允許不同軟件組件之間進行交互和通信的接口,它們為開發者提供了方便和標準的方法來使用其他應用程序的功能或數據。

當前,API 技術的普及使得API安全成為一個常見的議題。API安全是指針對應用程式介面(API)的保護措施,以預防恶意攻擊和濫用。為確保API的安全性,以下幾個方面需要特別關注:

  1. 認證和授權:認證指的是識別請求的來源,確保它是合法且授權的用戶。授權則是確保該用戶有權訪問所請求的受保護資源。這可以通過使用API密鑰、令牌或OAuth等方式來實現。

  2. 加密和傳輸安全:為了防止敏感資料在傳輸過程中被截取或窺探,API通常使用SSL/TLS等加密協議來確保請求和響應數據的安全。這樣可以保證數據在傳輸過程中是加密的,即使被截取,也難以解讀。

  3. 輸入驗證和防止注入攻擊:輸入驗證是指在接收到用戶請求後,對輸入數據進行驗證和過濾,以確保其合法性和安全性。這有助於防止一些常見的攻擊,如SQL注入和跨站腳本攻擊(XSS)。

  4. 防止拒絕服務攻擊:這是針對API的性能和可用性的一種攻擊手段,攻擊者試圖通過發起大量的請求或者耗費大量資源,從而使服務變得不可用。為了應對此類攻擊,可以實施請求限制、設置使用配額或實施機器人檢測機制。

以下關於一些API攻擊的知識,我挑了一個最簡單的範例來輔助說明

API認證和授權範例

GET /api/resources/1 HTTP/1.1
Host: api.example.com
Authorization: Bearer
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
  1. GET /api/resources/1 HTTP/1.1:HTTP請求行,進行一個GET請求,請求的目標是位於/api/resources/1的資源。HTTP/1.1是協議版本。

  2. Host: api.example.com:指定了請求要發送到的主機(即api.example.com)。

  3. Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c:用於傳遞用於驗證身份的令牌。

這段程式碼描述了一個使用JWT驗證的GET請求,目的是從api.example.com的API端點獲取ID為1的資源。在發送請求之前,用戶必須提供有效的JWT令牌以通過身份驗證。

那麼這段程式碼對於API安全有甚麼意義? 實際上最常見的API安全攻擊,就是由偽造認證和授權來達成的。在上述程式碼中,Authorization標頭使用了Bearer令牌,這是一種常見的身份驗證方法。然而,如果令牌無效、過期或未被授予訪問指定資源的權限,就會發生未經授權的訪問。攻擊者可能會嘗試使用偽造的令牌或通過其他方式繞過身份驗證,以獲取他們沒有權限訪問的API資源。這樣的攻擊可能導致敏感數據洩露或未授權的操作。

API攻擊

API攻擊是指攻擊者利用API的漏洞或弱點,對API系統進行惡意操作的行為。除了認證和授權,以下是其他常見的API攻擊類型:

注入攻擊:攻擊者將惡意代碼或命令嵌入API請求中,企圖在後端執行惡意操作。例如,SQL注入攻擊會通過篡改API請求參數,向後端數據庫注入惡意SQL語句,導致數據庫遭到破壞或洩露敏感信息。

拒絕服務攻擊(DoS):攻擊者試圖通過持續發送大量無效請求或惡意請求,使API系統無法處理正常的合法請求,導致服務不可用。

跨站點腳本攻擊(XSS):攻擊者向API返回的響應中註入惡意腳本,當其他用戶訪問該響應時,腳本會在用戶瀏覽器上執行,從而可能竊取用戶的信息或劫持用戶會話。

重放攻擊:攻擊者截獲和重新使用合法用戶的請求或令牌,重複發送相同的請求,以繞過認證或執行未授權的操作。

信息洩露:API可能返回過多的信息,甚至是錯誤的敏感信息,攻擊者可以利用這些信息來了解系統架構或潛在的安全漏洞。

個人總結及給新手的提醒

如果在接觸過AI輔助進行專案開發之後,產生興趣想深入的學習更深層的內容,務必注意資訊的安全性,即使只懂最基本的也好,作為專案開發的新人,學習並深入了解API安全的基本概念、原則和常見的攻擊類型。了解安全機制和防範措施是確保API安全的基礎。

在設計API時,選擇合適的認證機制,如JWT、OAuth等。不要在API請求中包含敏感信息,避免使用明文認證方式。合理規劃權限控制,根據需求,為API資源設定合理的權限控制策略,確保只有授權用戶可以訪問相關資源。

  • 進行輸入驗證和過濾:對API接收到的所有輸入數據進行驗證和過濾,以防止惡意數據的注入和攻擊。

  • 啟用HTTPS加密:確保API使用HTTPS協議傳輸數據,避免敏感信息在傳輸過程中被截取。

  • 監控和審計API請求:建立API請求的監控和審計機制,及時發現異常請求並做出相應的應對措施。

  • 定期檢查API安全性:不斷檢查和評估API的安全性,及時修復可能存在的漏洞和弱點。

建立良好的安全意識和實施恰當的安全措施是確保API安全的必備。一定要將安全性放在首位,並不斷學習和提升API安全知識,學習就對了 !

CC BY-NC-ND 4.0 授权

喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!