在本文中,我们讨论了对付13种不同静态暴露的技巧
对于每种暴露,我们解释了不处理这些安全性问题所造成的影响
我们还为您推荐了一些准则,要开发不受这些静态安全性暴露威胁的、健壮且安全的Java应用程序,您应该遵循这些准则
一有合适的时机,我们就提供代码样本(既有暴露的代码也有无暴露的代码)
对付高严重性暴露的技巧请遵循下列建议以避免高严重性静态安全性暴露:限制对变量的访问让每个类和方法都成为final,除非有足够的理由不这样做不要依赖包作用域使类不可克隆使类不可序列化使类不可逆序列化避免硬编码敏感数据查找恶意代码限制对变量的访问如果将变量声明为public,那么外部代码就可以操作该变量
这可能会导致安全性暴露
影响如果实例变量为public,那么就可以在类实例上直接访问和操作该实例变量
将实例变量声明为protected并不一定能解决这一问题:虽然不可能直接在类实例基础上访问这样的变量,但仍然可以从派生类访问这个变量
清单1演示了带有public变量的代码,因为变量为public的,所以它暴露了
带有public变量的代码classTest{publicintid;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("IllegalS