摘要:本文是來自Sun官方站點的一篇關于如何編寫安全的Java代碼的指南,開發者在編寫一般代碼時,可以參照本文的指南
• 靜態字段
• 縮小作用域
• 公共方法和字段
• 保護包
• equals方法
• 如果可能使對象不可改變
• 不要返回指向包含敏感數據的內部數組的引用
• 不要直接存儲用戶提供的數組
• 序列化
• 原生函數
• 清除敏感信息
靜態字段
• 避免使用非final的公共靜態變量
應盡可能地避免使用非final公共靜態變量,因為無法判斷代碼有無權限改變這些變量值。
• 一般地,應謹慎使用易變的靜態狀態,因為這可能導致設想中相互獨立的子系統之間發生不可預知的交互。
縮小作用域
作為一個慣例,盡可能縮小方法和字段的作用域。檢查包訪問權限的成員能否改成私有的,保護類型的成員可否改成包訪問權限的或者私有的,等等。
公共方法/字段
避免使用公共變量,而是使用訪問器方法訪問這些變量。用這種方式,如果需要,可能增加集中安全控制。
對于任何公共方法,如果它們能夠訪問或修改任何敏感內部狀態,務必使它們包含安全控制。
參考如下代碼段,該代碼段中不可信任代碼可能設置TimeZone的值:
以下是引用片段: private static TimeZone defaultZone = null; public static synchronized void setDefault(TimeZone zone) { defaultZone = zone; } |
原文轉自:http://www.anti-gravitydesign.com