為客戶端提供服務的一種方式.
當我們討論api安全時,包括
api安全的目標:cia
spoofing: 欺騙.偽裝成某人.
tampering:干預.將不希望被修改的資料,訊息/設定進行更改.
requdiation:否認,拒絕承認做過的事.
information disclosure:資訊洩露.將你希望保密的資訊披露出來.
denial of service:拒絕服務.阻止使用者訪問資訊和服務.
elevation of privilege:越權,做了你不希望他做的事.
認證:(欺騙).確保使用者真的是他們自己.
授權:(資訊洩露/干預/越權).確保每個針對api的訪問都是經過授權的.
審計:(否認).確保所有的操作都被記錄,以便追溯和監控.
流控:(拒絕服務).防止使用者請求淹沒api.
加密:(資訊洩露).確保出入api的資料都是私密的.
當限流機制生效時,請求應該立即被拒絕,並返回狀態碼429(too many request)
可以在負載均衡/反向**上做(集群),應用上做(單體).
保證可用性
流控應該做在整個安全機制的第一位.
ratelimiter類
認證和登陸不是乙個概念
認證每次都會執行,登陸一般只發生一次.
認證無論如何都會繼續,傳遞到審計,最終是否生效由授權完成.
最基礎的認證,但並不是非常安全
步驟各種校驗
介面層校驗
介面層校驗一般採用 jsr-303 進行校驗,由框架層面進行校驗,
資料庫校驗
在介面到資料庫的傳輸過程中,由於業務的執行,可能導致資料異常,因此需要在資料庫層面進行校驗
密碼加密
使用者的密碼一定要加密儲存
加密演算法的選擇
傳入的密碼能否加密成記錄的密碼.
鹽為了避免相同值雜湊後值仍然相同的問題.
使用隨機字串做鹽,並編入密文中.
https訪問
資料在到達應用之前的安全保證.
證書的獲取方式
一般在網路入口設定https
在認證之後,授權之前.
日誌需要持久化.
審計需要在應用的入口和出口處處理.
filter是web規範
後續的是spring提供的過程
controlleradvice一般是全域性異常處理.
請求是否需要認證,如果需要認證,卻無法認證,則返回401.需要認證,但沒有成功
有沒有許可權.無許可權則返回403,身份認證正常,但無許可權.
401通過修改請求的引數可以避免,但如果是403,則無論進行何種修改都不應該繞過403.
訪問控制
acl : access control lists
簡單易用,實現容易.無法滿足複雜的業務需求,不易管理.
誰能做什麼直接和人掛鉤.
linux就使用了acl
rbac: role based access control
引入角色概念,簡化管理.開發起來相對acl複雜
誰能做什麼,和人的角色相關
登陸不是每一次都需要的.
不要在每一次請求中都傳入使用者名稱密碼.
基於token的身份認證
基於cookie和session的實現
優點: 缺點
cookie的傳送與瀏覽器中的cookie的網域名稱位址和請求路徑有關
如果cookie是頂級網域名稱,則cookie在下級網域名稱中也會傳送出去
cookie中還可以設定是否允許指令碼傳送,目的是為了防止跨站指令碼攻擊.
問題: 固定session攻擊
處理方法:
先判斷是否存在session.如果存在乙個session,則讓原有session失效.
api介面安全
介面的安全性主要圍繞token timestamp和sign三個機制展開設計,保證介面的資料不會被篡改和重複呼叫,下面具體來看 token授權機制 使用者使用使用者名稱密碼登入後伺服器給客戶端返回乙個token 通常是uuid 並將token userid以鍵值對的形式存放在快取伺服器中。服務端接收...
API安全機制
api 安全機制 介面的安全性主要圍繞token timestamp和sign三個機制展開設計,保證介面的資料不會被篡改和重複呼叫,下面具體來看 token授權機制 使用者使用使用者名稱密碼登入後伺服器給客戶端返回乙個token 通常是uuid 並將token userid以鍵值對的形式存放在快取伺...
API 介面安全
什麼是時序攻擊以及如何防範時序攻擊?時序攻擊屬於側通道攻擊 旁路攻擊 side channel attack 側通道攻擊是指利用通道外的資訊,比如加解密的速度 加解密時晶元引腳的電壓 密文傳輸的流量和途徑等進行攻擊的方式,乙個詞形容就是 旁敲側擊 舉乙個最簡單的計時攻擊的例子,某個函式負責比較使用者...