- 0
- 0
- 约1.44万字
- 约 18页
- 2026-03-09 发布于河北
- 举报
在本文中,我们讨论了对付13种不同静态暴露的技巧。对于每种暴露,我们解释了不
处理这些安性问题所造成的影响。我们还为您推荐了一些准则,要开发不受这些静态安
性暴露威胁的、健壮且安的Java应用程序,您应该遵循这些准则。一有合适的时机,我
们就提供代码样本(既有暴露的代码也有无暴露的代码)。
对付高严重性暴露的技巧
清遵循下列建议以避免高严重性静态安性暴露:
限制对变量的访问
让每个类和方法都成为final,除非有足够的理由不这样做
不要依赖包作用域
使类不可克隆
使类不可序列化
使类不可逆序列化
避免硬编码敏感数据
查找恶意代码
限制对变量的访问
如果将变量声明为public,那么外部代码就可以操作该变量。这可能会导致安性暴露。
影响
如果实例变量为public,那么就可以在类实例上直接访问和操作该实例变量。将实例变
量声明为protected并不一定能解决这一问题:虽然不可能直接在类实例基础上访问这样的
变量,但仍然可以从派生类访问这个变量。
清单1演示了带有pubic变量的代码,因为变量为public的,所以它暴露了。
清单1.带有public变量的代码
classTest{
publicintid;
protectedStringname;
Test(){
id=1;
name=elloworld;
)
//code
)
publicclassMyClassextendsTest{
publicvoidmetodIllegalSet(Stringname){
(is.namc=name;//tissouldnotbeallowed
)
publicstaticvoidmain(String[]args){
Testobj=newTcst();
obj.id=123;//tissouldnotbeallowed
MyClassme=newMyClass();
mc.mctodlllcgalSctCIllcgalSetValue);
I
)
建议
一般来说,应该使用取信方法而不是public变量。按照具体问题具体对待的原则,在
确定哪些变量特别重要因而应该声明为private时,请将编码的方便程度及成本同安性需
要加以比较。清单2演示了以下列方式来使之安的代码:
清单2.不带有public变量的代码
classTest{
privateintid;
privateStringname;
Test(){
id=I;
name=elloworld;
)
publicvoidsetld(intid){
tis.id=id;
)
publicvoidsctNamc(Stringnamc){
tis.name=name;
)
publicintgetld(){
returnid;
)
publicStringgetName(){
retu
原创力文档

文档评论(0)