2016-02-26 673 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