background image

Java 开发:如何编写安全的 Java 代码

•        静态字段
•        缩小作用域
•        公共方法和字段
•        保护包
•        equals 方法
•        如果可能使对象不可改变
•        不要返回指向包含敏感数据的内部数组的引用
•        不要直接存储用户提供的数组
•        序列化
•        原生函数
•        清除敏感信息

静态字段
•        避免使用非 final 的公共静态变量
应尽可能地避免使用非 final 公共静态变量,因为无法判断代码有无权限改变这些变量值。
•        一般地,应谨慎使用易变的静态状态,因为这可能导致设想中相互独立的子系统
之间发生不可预知的交互。

缩小作用域
作为一个惯例,尽可能缩小方法和字段的作用域。检查包访问权限的成员能否改成私有的,
保护类型的成员可否改成包访问权限的或者私有的,等等。

公共方法/字段
避免使用公共变量,而是使用访问器方法访问这些变量。用这种方式,如果需要,可能增
加集中安全控制。
对于任何公共方法,如果它们能够访问或修改任何敏感内部状态,务必使它们包含安全
控制。
参考如下代码段,该代码段中不可信任代码可能设置 TimeZone 的值:
private static TimeZone  defaultZone = null;

      public static synchronized void setDefault(TimeZone zone)
      {
          defaultZone = zone;
      }

保护包