5
我目前嘗試了很多與Java的安全機制,以瞭解如何最好地在沙箱中運行不受信任的代碼。你想要防止的事情之一是無限循環,這就是爲什麼你想在自己的線程中運行不可信代碼的原因。當然,現在,惡意代碼可能會進行一些繁重的處理,導致掛起的線程。爲了擺脫這個線程,唯一的方法是使用java的不推薦使用的Thread.stop()機制。這是有問題的主要原因是線程持有的所有鎖都被釋放,這可能導致對象損壞。的Java:監控採集鎖
的問題是:Java的安全管理器和定製類裝入器,我能夠跟蹤,例如,哪些類可以加載和哪些系統資源可以被訪問。是否有辦法通知(並可能禁止)獲取鎖的代碼(例如,定義在當前線程進入同步塊之前通知的回調)。
如此,雖然理想,我不想放棄類,只是因爲他們可能獲取鎖。我當然可以在加載和插入回調時更改字節碼,但這不適用於java。*中的任何類。 monitorenter是唯一一個告訴vm抓住鎖的字節碼指令嗎? –
但是,只有編譯同步塊時纔會發出monitorenter,而在調用同步方法時,鎖獲取是隱式的。所以你也必須阻止線程獲得對同步方法的共享對象的訪問。如果代碼是在java中。*,不過,你應該假設它不是邪惡的:) –
在Java代碼。*是不是邪惡的。但是,如果來自java。*的對象被共享,例如來自java.concurrent的隊列,那麼即使從外部使用該對象,也會從java。*內獲取該鎖。 –