技術問答
技術文章
iT 徵才
聊天室
2025 鐵人賽
登入/註冊
問答
文章
Tag
邦友
鐵人賽
搜尋
第 12 屆 iThome 鐵人賽
DAY
30
0
Software Development
安全軟體開發生命週期(SSDLC)學習筆記
系列 第
30
篇
API 開發方法
12th鐵人賽
HO-HSUN
2020-10-15 19:00:35
1858 瀏覽
分享至
總覽
API 路徑(Endpoint)的一般安全準則。
注意事項
存取控制
API路徑應遵循最小特權原則。具有受保護訊息的服務應服務於最小的群體。
具有錯誤配置的存取控制的API可能導致意外的訊息洩漏,或對敏感資料進行未經授權的惡意更改狀態的操作。
問題範例:
POST,允許用戶修改帳戶訊息,而無需檢查用戶是否擁有要修改的帳戶。
一個GET請求,該請求無需身份驗證即可返回敏感的訊息性訊息。
修正方式
確定哪些API操作應被視為敏感或公開的。
對於內部API:盡可能限制網路存取。
理想情況下,這些路徑應被限制在一個封閉的網路中。
並且要求比單一API金鑰更強的身份驗證。
例如,多因子身份驗證。
對於具有敏感訊息的公開API:
在執行請求的任何操作之前,需要進行身份驗證。
API金鑰應該是可撤銷的,也可以是可更新的。
對於提供公開訊息的公開API:
確保未通過身份驗證未通過公開API執行任何狀態更改操作。
考慮速率限制,以防止單個主機在短時間內發出太多請求。
風險等級
根據情況從低到高不等。
參考資料
https://www.owasp.org/index.php/REST_Security_Cheat_Sheet
輸入驗證
傳入的資料在解析時可能格式錯誤或被設計為導致意外行為。
根據輸入的解析方式,未驗證的輸入可能包含命令注入或其他有害操作。
修正方式
類型檢查:
確保輸入為預期的資料類型,拒絕其他任何內容。
確保輸入為預期的資料類型,拒絕其他任何內容。
長度和大小檢查:
輸入應在預期的長度或大小之內。
拒絕任何大於或小於預期的內容。
將白名單接受的內容類型
限制http方法
風險等級
根據情況從低到高不等。
驗證要求
有可能在原始請求者和API路徑之間的傳輸過程中修改請求。
修改後的請求可能導致對原始請求者的資料進行狀態更改操作。
或者導致要提供的資料不正確,修改或意外。
重播攻擊
攻擊者發送了先前的真實請求,以使操作在以後的時間再次發生。
傳輸中已修改的請求:攻擊者會在發送真實請求時修改資料。
修正方式
為每個包含敏感資料或操作的請求生成簽名或HMAC(雜湊訊息驗證碼)。
檢查請求的簽名以確定其是否真實。
簽署包含時間戳記的請求,並拒絕所有相對過舊的請求。
風險等級
根據情況從低到高不等。
參考資料
https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html#why-requests-are-signed
通用安全實踐
即使遵循API的最佳安全做法,也有可能錯過其他惡意活動。
問題範例:
沒有日誌記錄或監視丟失的安全事件
返回服務後端的堆疊紀錄或其他描述性訊息
修正方式
記錄並監視API活動。
檢測異常可以幫助發現其他地方沒有發現的惡意活動。
禁用CORS(跨源資源共享)
或者將CORS的範圍縮小到最小,以防止偽造的請求或資料洩漏。
返回模糊的錯誤回應。
向用戶返回錯誤時,請盡可能少地提供訊息。
不要返回有關服務器環境的任何訊息或調試訊息,例如堆疊紀錄。
風險等級
根據情況從低到高不等。
留言
追蹤
檢舉
上一篇
Ruby 最佳實踐
下一篇
授權和認證開發方法
系列文
安全軟體開發生命週期(SSDLC)學習筆記
共
36
篇
目錄
RSS系列文
訂閱系列文
21
人訂閱
32
密碼開發方法
33
HTTP標頭開發方法
34
防止常見的Web攻擊開發方法
35
安全密碼儲存開發方法
36
安全系統開發方法
完整目錄
熱門推薦
{{ item.subject }}
{{ item.channelVendor }}
|
{{ item.webinarstarted }}
|
{{ formatDate(item.duration) }}
直播中
立即報名
尚未有邦友留言
立即登入留言
iThome鐵人賽
參賽組數
902
組
團體組數
37
組
累計文章數
19843
篇
完賽人數
528
人
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
15th鐵人賽
16th鐵人賽
13th鐵人賽
14th鐵人賽
17th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
windows
php
c#
linux
windows server
css
react
熱門問題
iOS 裝置無法透過 IPsec VPN 連入 FortiGate,請問正確設定方式?
EPSON LQ-690C 印表機中一刀跑版
[Javascript] 非同步執行,如何延緩後面程式的處理 ??
印表機設定 - Epson 690c
AARQ 通訊協議是?
Dell or Asus 伺服器,哪牌比較好?
Dell or Asus Storage 或NAS,哪牌比較好?
將硬碟上的 EFI 分割區複製到固態硬碟後,ARM 架構的 Ubuntu Server 無法啟動
sdray vigor2927 sslvpn ip設定問題
熱門回答
iOS 裝置無法透過 IPsec VPN 連入 FortiGate,請問正確設定方式?
EPSON LQ-690C 印表機中一刀跑版
[Javascript] 非同步執行,如何延緩後面程式的處理 ??
印表機設定 - Epson 690c
Dell or Asus 伺服器,哪牌比較好?
熱門文章
Vue 的this跟 js 的this有什麼不同?為什麼能直接存取屬性? componentInstance(元件實例)
DNS 可見度差距:防火牆在網路安全中忽略的錯誤設定
告別「N 個 resize 監聽器」改用 React Context API 改善網頁效能
[資料治理實戰回憶錄]0-從失敗中開始
台灣職場必學的Excel函數技巧
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}