第1页共18页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第1页共18页在本文中,我们讨论了对付13种不同静态暴露的技巧。对于每种暴露,我们解释了不处理这些安全性问题所造成的影响。我们还为您推荐了一些准则,要开发不受这些静态安全性暴露威胁的、健壮且安全的Java应用程序,您应该遵循这些准则。一有合适的时机,我们就提供代码样本(既有暴露的代码也有无暴露的代码)。对付高严重性暴露的技巧请遵循下列建议以避免高严重性静态安全性暴露:限制对变量的访问让每个类和方法都成为final,除非有足够的理由不这样做不要依赖包作用域使类不可克隆使类不可序列化使类不可逆序列化避免硬编码敏感数据查找恶意代码限制对变量的访问如果将变量声明为public,那么外部代码就可以操作该变量。这可能会导致安全性暴露。影响如果实例变量为public,那么就可以在类实例上直接访问和操作该实例变量。将实例变量声明为protected并不一定能解决这一问题:虽然不可能直接在类实例基础上访问这样的变量,但仍然可以从派生类访问这个变量。清单1演示了带有public变量的代码,因为变量为public的,所以它暴露了。清单1.带有public变量的代码classTest{publicintid;第2页共18页第1页共18页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第2页共18页protectedStringname;Test(){id=1;name="helloworld";}//code}publicclassMyClassextendsTest{publicvoidmethodIllegalSet(Stringname){this.name=name;//thisshouldnotbeallowed}publicstaticvoidmain(String[]args){Testobj=newTest();obj.id=123;//thisshouldnotbeallowedMyClassmc=newMyClass();mc.methodIllegalSet("IllegalSetValue");}}建议一般来说,应该使用取值方法而不是public变量。按照具体问题具体对待的原则,在确定哪些变量特别重要因而应该声明为private时,请将编码的方便程度及成本同安全性需要加以比较。清单2演示了以下列方式来使之安全的代码:第3页共18页第2页共18页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第3页共18页清单2.不带有public变量的代码classTest{privateintid;privateStringname;Test(){id=1;name="helloworld";}publicvoidsetId(intid){this.id=id;}publicvoidsetName(Stringname){this.name=name;}publicintgetId(){returnid;}publicStringgetName(){returnname;}}让每个类和方法都为final第4页共18页第3页共18页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第4页共18页不允许扩展的类和方法应该声明为final。这样做防止了系统外的代码扩展类并修改类的行为。影响仅仅将类声明为非public并不能防止攻击者扩展类,因为仍然可以从它自己的包内访问该类。建议让每个类和方法都成为final,除非有足够的理由不这样做。按此建议,我们要求您放弃可扩展性,虽然它是使用诸如Java语言之类的面向对象语言的主要优点之一。在试图提供安全性时,可扩展性却成了您的敌人;可扩展性只会为攻击者提供更多给您带来麻烦的方法。不要依赖包作用域没有显式地标注为public、private或protected的类、方法和变量在它们自己的包内是可访问的。影响如果Java包不是封闭的,那么攻击者就可以向包内引入新类并使用该新类来访问您想保护的内容。诸如java.lang之类的一些包缺省是封闭的,一些JVM也让您封闭自己的包。然而,您最好假定包是不封闭的。建议从软件工程观点来看,包作用域具有重要意义,因为它可以阻止对您想隐藏的内容进行偶然的、无意中的访问。但不要依靠它来获取安全性。应该将类、方法和变量显式标注为public、private或protected中适合您特定需求的那种。使类不可克隆克隆允许绕过构造器而轻易地复制类实例。影响即使您没有有意使类可克隆,外部源仍然可以定义您的类的子类,并使该子类实现java.lang.Cloneable。这就让攻击者创建了您的类的新实例。拷贝现有对象的内存映象生成了新的实例;虽然这样做有时候是生成新对象的可接受方法,但是大多数时候是不可接受的。清单3说明了因为可克隆而暴露的代码:第5页共18页第4页共18页编号:时间:2...