2011年4月19日 星期二

ESAPI

ESAPI
官網的介紹是
ESAPI (The OWASP Enterprise Security API) 是一個free、open source的web application security control library。
可以讓開發者較簡單的做出高安全性的application.
ESAPI設計上是可以較容易的加強現有系統的安全性並且作為系統的基礎設計。
提供方便的實作讓開發者可以輕易的使用,不用限定在特定的架構中。
支援 java、javascript、object C、.NET、PHP...等等許多語言。


ESAPI包含下列模組:
Authenticator
User
AccessController
AccessReferenceMap
Validator
Encoder
HTTPUtilities
Encryptor
EncryptedProperties
Randomizer
Exception Handling
Logger
IntrusionDetector
SecurityConfiguration
ESAPI涵蓋的範圍:
認證機制
安全控制
輸入檢驗
輸出編碼/跳脫
密碼應用
錯誤處理與紀錄
通訊安全
HTTP安全
系統設定

在JAVA中可以使用下列api取代原本的程式
JAVA -> ESAPI
System.out.println() -> Logger.*
Throwable.printStackTrace() -> Logger.*
Runtime.exec() -> Executor.safeExec()
Reader.readLine() -> Validator.safeReadLine()
Session.getId() -> Randomizer.getRandomString() (better not to use at all)
ServletRequest.getUserPrincipal() -> Authenticator.getCurrentUser()
ServletRequest.isUserInRole() -> AccessController.isAuthorized*()
Session.invalidate() -> Authenticator.logout()
Math.Random.* -> Randomizer.*
File.createTempFile() -> Randomizer.getRandomFilename()
ServletResponse.setContentType() -> HTTPUtilities.setContentType()
ServletResponse.sendRedirect() -> HTTPUtilities.sendSafeRedirect()
RequestDispatcher.forward() -> HTTPUtilities.sendSafeForward()
ServletResponse.addHeader() -> HTTPUtilities.addSafeHeader()
ServletResponse.addCookie() -> HTTPUtilities.addSafeCookie()
ServletRequest.isSecure() -> HTTPUtilties.isSecureChannel()
Properties.* -> EncryptedProperties.*
ServletContext.log() -> Logger.*
java.security and javax.crypto -> Encryptor.*
java.net.URLEncoder/Decoder -> Encoder.encodeForURL/decodeForURL
java.sql.Statement.execute -> PreparedStatement.execute
ServletResponse.encodeURL -> HTTPUtilities.safeEncodeURL (better not to use at all)
ServletResponse.encodeRedirectURL -> HTTPUtilities.safeEncodeRedirectURL (better not to use at all)
我的結論是:實作有彈性、結果蠻安全。善用一些框架可以增加系統的安全性(例如:hibernate、spring security、struts...等等)。

在web application的系統中,要掌握的主要重點如下:
1.健全的存取控制、權限規劃:
應用系統的權限、存取控制是否權限太高!?
系統的認證、授權檢查,密碼的強度
2.輸出入資料驗證與過濾、編碼:
對於進出入系統的任何資訊都是"不可靠"的,均需經過驗證、過濾。
3.錯誤處理(Error Handling):
錯誤訊息是否透漏太多訊息給別人!?
4.避免危險的參數傳遞方式:
是否使用SSL或者用參數傳遞了重要資料(帳號、密碼)
5.採用合適的加密演算法:
6.注意註解是否有機密:
7.刪除測試檔及備份檔:
8.防自動化工具(Anti-Automation):
密碼可能會被try出來。
9.開發環境安全亦不可忽視
10.程式語言專屬的注意事項:
全域變數、多執行緒、decompiler...等等

沒有留言:

張貼留言