2016-02-26 672 views
1

我非常确定我从FindBugs获得了误报。我的代码如下:FindBugs中的错误肯定MS_PKGPROTECT错误

public class MyClass { 
    protected static String fileNamePrefix; 
}   

这是我收到的错误:可以通过恶意代码或改变

场应包保护

一个可变的静电场事故。该字段可以进行包保护以避免此漏洞。

Bug的种类和样式:MS - MS_PKGPROTECT

这真的是假阳性或者我失去了一些东西?

回答

1

受保护的修饰符允许第三方子类提升对该字段的访问权限。

class MyEvilSubClass extends MyClass { 
    static { 
     fileNamePrefix = "../" + fileNamePrefix; 
    } 
} 

FindBugs指出,'受保护'并不能保护野外的公众无法访问。如果该领域受到封装保护,那么我们知道其目的是在可信赖的朋友之间分享一些秘密。

通常,隐藏字段并创建存取方法,因为它在封装,线程安全性和延迟加载方面更灵活。

+0

哇,没有看到那个人来......所以创造一个吸气球和二传手是正确的方式来进行,对吧?这两种方法应该受到保护或公开吗? – randombee

+0

@randombee对。相同的规则适用于应用于静态方法的字段。与方法的不同之处在于,您可以使用安全管理器等验证调用者。如果是公共数据,则将其公开。如果它是你的类中的一些秘密,那么使它成为默认访问。 – jmehrens

+0

关于FindBugs描述的一个注释。虽然该字段可以“无意中”更改,但修复程序肯定不会阻止恶意代码。我可以在相同的包装空间中创建我的包装,例如org.apache.http.MyClass并访问该标志。如果这不起作用,总会有反思。 – dzlatkov