java黑客帝国代码 黑客帝国矩阵代码( 四 )


查找恶意代码
从事某个项目的某个心怀叵测的开发人员可能故意引入易受攻击的代码,打算日后利用它 。这样的代码在初始化时可能会启动一个后台进程,该进程可以为闯入者开后门 。它也可以更改一些敏感数据 。
这样的恶意代码有三类:
类中的 main 方法
定义过且未使用的方法
注释中的死代码
影响
入口点程序可能很危险而且有恶意 。通常,Java 开发人员往往在其类中编写 main() 方法,这有助于测试单个类的功能 。当类从测试转移到生产环境时,带有 main() 方法的类就成为了对应用程序的潜在威胁,因为闯入者将它们用作入口点 。
请检查代码中是否有未使用的方法出现 。这些方法在测试期间将会通过所有的安全检查 , 因为在代码中不调用它们 — 但它们可能含有硬编码在它们内部的敏感数据(虽然是测试数据) 。引入一小段代码的攻击者随后可能调用这样的方法 。
避免最终应用程序中的死代码(注释内的代码) 。如果闯入者去掉了对这样的代码的注释,那么代码可能会影响系统的功能性 。
可以在清单 8 中看到所有三种类型的恶意代码的示例:
清单 8. 潜在恶意的 Java 代码
public void unusedMethod(){
// code written to harm the system
}
public void usedMethod(){
//unusedMethod(); //code in comment put with bad intentions,
//might affect the system if uncommented
// int x = 100;
// x=x+10;//Code in comment, might affect the
//functionality of the system if uncommented
}
建议
应该将(除启动应用程序的 main() 方法之外的)main() 方法、未使用的方法以及死代码从应用程序代码中除去 。在软件交付使用之前,主要开发人员应该对敏感应用程序进行一次全面的代码评审 。应该使用“Stub”或“dummy”类代替 main() 方法以测试应用程序的功能 。
对付中等严重性暴露的技巧
请遵循下列建议以避免中等严重性静态安全性暴露:
不要依赖初始化
不要通过名称来比较类
不要使用内部类
不要依赖初始化
您可以不运行构造器而分配对象 。这些对象使用起来不安全 , 因为它们不是通过构造器初始化的 。
影响
在初始化时验证对象确保了数据的完整性 。
例如,请想象为客户创建新帐户的 Account 对象 。只有在 Account 期初余额大于 0 时 , 才可以开设新帐户 。可以在构造器里执行这样的验证 。有些人未执行构造器而创建 Account 对象 , java黑客帝国代码他可能创建了一个具有一些负值的新帐户,这样会使系统不一致,容易受到进一步的干预 。
建议
在使用对象之前,请检查对象的初始化过程 。要做到这一点 , 每个类都应该有一个在构造器中设置的私有布尔标志,如清单 9 中的类所示 。在每个非 static 方法中 , 代码在任何进一步执行之前都应该检查该标志的值 。如果该标志的值为 true,那么控制应该进一步继续;否则 , 控制应该抛出一个例外并停止执行 。那些从构造器调用的方法将不会检查初始化的变量,因为在调用方法时没有设置标志 。因为这些方法并不检查标志,所以应该将它们声明为 private 以防止用户直接访问它们 。
清单 9. 使用布尔标志以检查初始化过程
public class MyClass{
private boolean initialized = false;
//Other variables
public MyClass (){
//variable initialization
method1();
initialized = true;
}
private void method1(){ //no need to check for initialization variable
//code

推荐阅读