簡體   English   中英

注射方法/變量:公開還是不公?

[英]Injection Methods/Variables: public or Not?

許多Java框架允許將用於注入的類成員聲明為非公共。 例如,Spring和EJB 3中注入的變量可能是私有的。 JPA允許持久類的屬性受到保護或包私有。

我們知道如果可以,最好將方法聲明為非公開方法。 話雖這么說,如果我沒有弄錯,允許這些框架訪問非公共成員只能使用默認的Java安全管理器。 是不是意味着自定義代碼也可以通過調用setAccessible()來反映非公共成員, 這會危及安全性

這引出了這個問題:在設置注射方法的訪問級別時,最佳做法是什么?

通常,類需要選擇加入持久性機制。 例如,Java serialisatoin需要一個類來實現java.io.Serializable 實現Serializable的類是負責確保它們是安全的。 如果一個庫允許通過外部配置文件戳私有,那么這不應該被信任 - 反射真的很危險,並且它的使用通常搞砸了。

當然,如果您確實發現了漏洞,請將其報告給相應的組。

如果您在與應用程序相同的JVM中運行不受信任的代碼,並且您正在使用默認的安全管理器設置,那么,這可能是一個安全漏洞。 這是你需要注意的事情,但在實踐中,這種情況非常罕見。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM