0
當我進行聲吶掃描時,我得到的漏洞是「可變成員不應直接存儲或返回」。在提到我們應克隆可變對象或返回不可修改列表的情況下,也會提供此解決方案。 但是,如果我克隆該對象,並在稍後如果我想更新該值,那麼如何訪問原始對象,因爲我已經返回了克隆的對象? 對此的任何想法將不勝感激。在此先感謝聲吶掃描 - 可變成員不應該直接存儲或返回
當我進行聲吶掃描時,我得到的漏洞是「可變成員不應直接存儲或返回」。在提到我們應克隆可變對象或返回不可修改列表的情況下,也會提供此解決方案。 但是,如果我克隆該對象,並在稍後如果我想更新該值,那麼如何訪問原始對象,因爲我已經返回了克隆的對象? 對此的任何想法將不勝感激。在此先感謝聲吶掃描 - 可變成員不應該直接存儲或返回
但是如果我克隆對象,後來,如果我要更新的值,那麼我怎麼能訪問原來的對象,因爲我已經回到了克隆的對象
你不。至少不是來自主叫方。
我這裏走出去的肢體,並說我們在談論一個列表,因此:
public class MyClass {
private List<String> strings;
public List<String> getStrings(){
// returns a copy, so member list is still intact
return new ArrayList<String>(strings);
}
public void addString(String newString) {
strings.add(newString);
}
public void dropString(String oldString) {
strings.remove(oldString);
}
public void replaceString(String oldString, String newString) {
dropString(oldString);
addString(newString);
}
}
換句話說,你控制通過所屬的類訪問成員的行動。如果你真的想要一個任何人都可以獲得和更新的公共成員(不是我推薦的),那麼放棄獲得者並且讓成員public
。
在st開發者之間進行討論後,還有一點我得到了。如果調用者來自我們的系統/應用程序,而不是來自外部,那麼仍然傳遞可變對象將是一個漏洞?因爲即使調用者更改了可變對象,因爲它來自系統內部,這也不會影響系統。 – Swapneel
@Swapneel我不是安全專家,但我相信假設調用者只會並且總是「內部」被認爲是有風險的。但隨後安全人士對自然和未來都是偏執狂。 –
感謝您的回覆。讚賞 – Swapneel