天天看點

《Java安全編碼标準》一1.4 效能洩露

效能(capability)指的是在授權中可以進行溝通而不會被忘記的辨別。效能這個詞是由dennis和van horn[dennis 1966]引入的。它指向的是一個數值,這個數值指向的對象擁有一系列的對象通路權限。在一個基于效能的作業系統中的使用者程式,必須使用效能來通路對象。

每一個java對象都有不會被遺忘的辨別。因為java的==操作符會對引用等進行測試,它會被用來測試這個辨別。因為有這個不會被遺忘的辨別,是以允許使用一個對象引用作為标記,進而作為某種形式的動作需要的授權的一個不會被遺忘的證據[mettler 2010a]。

授權會包含在對象引用中,這些對象引用被作為效能來使用。授權指那些運作代碼帶來的任何效果,而這些運作代碼也許會帶來其他的副作用。授權不僅包括那些對于外部資源例如檔案或者網絡套接字的操作,而且包含了那些在程式不同部分進行共享的可變資料結構的操作[mettler 2010b]。

對于那些方法會執行敏感操作的對象的引用而言,它們會允許持有者執行這些操作的效能(或者要求一個對象代表這些持有者執行這些操作)。是以,這樣的引用自身必須要被視為敏感資料,并且不能洩露給非受信代碼。

一個很有可能讓人感到驚訝的洩露效能和資料的源頭是内隐類,這些類可以通路它們包含的類的所有字段。java位元組碼缺少内置的對内隐類的支援,是以,内隐類必須編譯成帶有樣式名稱的普通類,如outerclass$innerclasss。因為内隐類必須能通路它們的包含類的私有字段,是以對這些字段的通路控制,就被轉換到對位元組碼中的包的通路來進行。因而,手寫的位元組碼可以通路這些名義上的私有字段(請以“java位元組碼工程的安全方面”[schonefeld2002]作為例子進行參考)。

以下是考慮效能的規則:

《Java安全編碼标準》一1.4 效能洩露
《Java安全編碼标準》一1.4 效能洩露