資安JAVA(三二): Access Control (2)

來源:John Melton's Weblog
標題:YEAR OF SECURITY FOR JAVA – WEEK 32 – ACCESS CONTROL (2)
作者:John Melton
What is it and why should I care?

上一篇已經提過 Access Control 的定義了。

What should I do about it?

前面提到我們可以用功能性來限制使用者的行為。第二種限制使用者行為的做法是,以資料區分─特定使用者只能存取特定資料。舉例:雖然所有登入網路銀行的使用者都能執行查詢餘額的功能,但只能顯示自己的數字。

麻煩的是我並不能替你決定應用程式中的哪些資料應具備特定存取性。若使用者的銀行帳戶應限縮存取權限,你也需要思考資料的儲存位置和連接使用者的銀行帳戶。然後適當的從資料庫使用查詢句撈資料。資料分類( data labeling)是目前常見的技術,缺點是需投入大量成本,如果你需要的是這種大型解決方案,你對存取控制應該有了一定認識。

另一個相關的議題是,許多框架都沒有提供以資料為主的存取控制 API ,,通常都需要你自己實作相關的 API。自訂的API通常只有你最關心的部分,不夠周全。某些 API 很安全,某些則不。所以,你的開發流程應該包括如何辨識哪些資料只能被特定使用者讀取,如何實作集中式的存取控制 API 。你也許會有類似以下的 API 格式:

if(isAuthorized(Bill, VIEW, Account.class, 17398)) {
//執行工作
} else {
//使用者正在做奇怪的事、或應用程式有 bug 或傳送事件給入侵偵測系統 appsensor
}

上面的 code 意思是確認 Bill (使用者)是否被允許執行顯示帳戶(功能) 17398 的餘額(資料)。假設你的 API 有這樣的邏輯,相信你已經做得比大部分應用程式還優秀。下一篇存取控制將討論存取控制中資料的其他議題。這兩篇文章的功能+資料的流程已經能提供很多幫助,只要你正確的、持續的堅持下去。

下個小結論,實作存取控制中的資料存取實際上比功能存取還要複雜,因為目前並不存在通用性的框架,和資料模型有高度相關性。但只要謹慎的實作 API,你比較容易持續使用下去。

參考資料
———–
https://www.owasp.org/index.php/Category:Access_Control
https://www.owasp.org/index.php/Guide_to_Authorization
https://www.owasp.org/index.php/Access_Control_Cheat_Sheet
http://www.youtube.com/watch?v=VL807kdpBpo


———–———–
資安Java: 上一篇 || 下一篇
———–———–

留言

這個網誌中的熱門文章

資安JAVA(八):HTTP強制傳輸安全(HSTS)

以 SharpPcap 實作可收聽封包的 C# 程式

資安JAVA(四):Session Cookie HTTPOnly Flag