資安JAVA(二十): 不要相信其他人(Trust Nothing)
來源:John Melton's Weblog
標題:YEAR OF SECURITY FOR JAVA – WEEK 20 – TRUST NOTHING
作者:John Melton
What is it and why should I care?
信任感是很有趣的議題,我們潛意識中相信人性本善,開發者也是。看看以下這個例子:
開發者相信使用者不會竄改 my_id 所以放心的直接帶入 executeDbQuery()。這太天真了,正確作法應該是用 my_id 參數傳入到 Prepare Statement 以防止 SQL Injection 同時檢查 my_id 的內容是否正確。
為何要如此大費周章?因為我們不能隨便相信輸入值,不能相信使用者會依照我們的期望使用系統。我們必須建造好用的、能承受攻擊的、強壯且吃苦耐勞的系統。無論你的系統是甚麼類型,作者建議不要信任( Trust )系統會接觸到的環境。
「不能信任系統環境」到底代表什麼意涵?是為了避免 XSS 和 SQL injection 嗎?是,但更深一層的意涵是以不同的方式了解應用程式。應用程式其實是規模不同的輸入-處理-輸出的過程,輸入值可能是 request parameters、headers、database input 等等,處理包括身分驗證、邏輯,輸出到資料庫、螢幕、檔案等等。整個應用程式可以當成所有系統元件的輸入值、處理、輸出的結合,並縮放規模到適合的系統和組織。
所謂的「環境」因人而異,「你不能相信任何人」也是因地制宜。作者的建議是我們應分辨可以相信的和不能相信的,不能相信的資料應視之為已經被汙染的資料。
威脅模擬( Threat Modeling )中包含許多此類議題,日後的文章作者會介紹。
What should I do about it?
既然我們已經建立「不能信任的環境」的前提,下一個合理問題就是,「環境中有什麼」?
不同的預設條件可能會有不同長短的答案,典型的Web應用程式可能會有以下的結論:
參考資料
http://www.ruggedsoftware.org/
http://www.schneier.com/book-lo.html
http://en.wikipedia.org/wiki/Robustness_principle
http://www.jtmelton.com/2012/05/01/year-of-security-for-java-week-18-perform-application-layer-intrusion-detection/
http://www.jtmelton.com/2012/04/10/year-of-security-for-java-week-15-audit-security-related-events/
———–———–
資安Java: 上一篇 || 下一篇
———–———–
標題:YEAR OF SECURITY FOR JAVA – WEEK 20 – TRUST NOTHING
作者:John Melton
Don't worry ^_^ |
信任感是很有趣的議題,我們潛意識中相信人性本善,開發者也是。看看以下這個例子:
//bad bad do not use
executeDbQuery("select * from my_table where id = " + request.getParameter("my_id"));
//bad bad do not use
開發者相信使用者不會竄改 my_id 所以放心的直接帶入 executeDbQuery()。這太天真了,正確作法應該是用 my_id 參數傳入到 Prepare Statement 以防止 SQL Injection 同時檢查 my_id 的內容是否正確。
為何要如此大費周章?因為我們不能隨便相信輸入值,不能相信使用者會依照我們的期望使用系統。我們必須建造好用的、能承受攻擊的、強壯且吃苦耐勞的系統。無論你的系統是甚麼類型,作者建議不要信任( Trust )系統會接觸到的環境。
「不能信任系統環境」到底代表什麼意涵?是為了避免 XSS 和 SQL injection 嗎?是,但更深一層的意涵是以不同的方式了解應用程式。應用程式其實是規模不同的輸入-處理-輸出的過程,輸入值可能是 request parameters、headers、database input 等等,處理包括身分驗證、邏輯,輸出到資料庫、螢幕、檔案等等。整個應用程式可以當成所有系統元件的輸入值、處理、輸出的結合,並縮放規模到適合的系統和組織。
所謂的「環境」因人而異,「你不能相信任何人」也是因地制宜。作者的建議是我們應分辨可以相信的和不能相信的,不能相信的資料應視之為已經被汙染的資料。
威脅模擬( Threat Modeling )中包含許多此類議題,日後的文章作者會介紹。
What should I do about it?
既然我們已經建立「不能信任的環境」的前提,下一個合理問題就是,「環境中有什麼」?
不同的預設條件可能會有不同長短的答案,典型的Web應用程式可能會有以下的結論:
- Web請求資料(parameters、headers、body、cookies)
- 資料庫資料
- 目錄資料( LDAP )
- 檔案資料
- Web Service 資料
- 外部系統資料
- 網路資料( 通常接收的是來自 Server 的資料)
- 使用者輸入
- 系統環境變數( system environment variables)
- 第三方軟體( 通常是你呼叫的函式庫 )
參考資料
http://www.ruggedsoftware.org/
http://www.schneier.com/book-lo.html
http://en.wikipedia.org/wiki/Robustness_principle
http://www.jtmelton.com/2012/05/01/year-of-security-for-java-week-18-perform-application-layer-intrusion-detection/
http://www.jtmelton.com/2012/04/10/year-of-security-for-java-week-15-audit-security-related-events/
———–———–
資安Java: 上一篇 || 下一篇
———–———–
留言
張貼留言