技術問答
技術文章
iT 徵才
Tag
聊天室
2024 鐵人賽
登入/註冊
問答
文章
Tag
邦友
鐵人賽
搜尋
第 12 屆 iThome 鐵人賽
DAY
30
0
Software Development
安全軟體開發生命週期(SSDLC)學習筆記
系列 第
30
篇
API 開發方法
12th鐵人賽
HO-HSUN
2020-10-15 19:00:35
1636 瀏覽
分享至
總覽
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鐵人賽
參賽組數
1064
組
團體組數
40
組
累計文章數
22043
篇
完賽人數
594
人
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
看更多
15th鐵人賽
16th鐵人賽
13th鐵人賽
14th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
windows
php
c#
windows server
linux
css
react
vue.js
熱門問題
[急!] Exchange 系統管理中心 不小心停用了使用者信箱 要怎麼復原
有人公司做過資訊安全演練嗎
excel 如何利用寫入VBA 來做到一鍵執行 「清空剪貼簿」?
從合規的角度上來說微服務架構當前的壁壘是什麼
資料庫系統
WIN11 一直跳出中毒的訊息
PYTHON 工具
windows11 策略編輯器 軟體限制原則失效?
如何讓內網的FortiGate防火牆可以收到韌體更新與下載
有關於Plesk 記憶體使用 的疑惑
熱門回答
WIN11 一直跳出中毒的訊息
如何讓內網的FortiGate防火牆可以收到韌體更新與下載
ORACLE SQL 多筆沖正資料時
有關於Plesk 記憶體使用 的疑惑
PYTHON 工具
熱門文章
PrintNightmare: 沒想到會被 Windows 11 終結
[系統設計]- 容易產生設計盲點
[Day 13] 資訊安全策略的制定與實施
新手入門:無伺服器函數和FaaS簡介
Day1 - 30天學習Python
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}