硬编码如密码、服务器 IP 地址、加密密匙这样的敏感信息,会将信息暴露给攻击者。任何一个可以访问类文件的人都可以对其进行反编译,然后得到敏感信息。因此,程序不能对敏感信息进行硬编码。对敏感信息进行硬编码会使代码管理变得更复杂。例如,在一个已部署的程序中,改变其硬编码密码需 要发布补丁。对敏感数据进行硬编码会向攻击者泄露信息。
对于不要硬编码敏感信息的情况,示例1给出了不规范用法(Java 语 言 )示例 。 示例2给出了规范用法(Java 语言)示例。
示例1:class IPaddress{String ipAddress = new String("172.16.254. 1");public static void main(String[] args)(
代码在一个 String常量中对服务器 IP 地址进行了硬编码。使用java 反编译工具(例如:javap -c IPaddress) 进行反汇编,从而可以得到硬编码的服务器 IP 地址。
示例2:class IPaddress{public static void main(String[] args) throws IOException {char[] ipAddress = new char[100];BufferedReaderbr = new BufferedReader(new InputStreamReader(newFileInputStream("serveripaddress.txt")));// Reads the server IP address into the char array,// returns the number of bytes readint n =br.read(ipAddress);// Validate server IP address// Manually clear out the server IP address// immediately after usefor(inti=n- 1;i>=0;i-){ipAddress[i]=0;br.close();
代码通过一个安全目录下的外部文件得到服务器 IP 地址。通过使用后立即清除内存中的服务器 IP,可以防止进一步泄露。