我目前工作的一個程序由用戶運行外部提供的代碼(假設這種情況下是合理的)。經過大量研究後,我發現大部分與此有關的安全性都可以通過SecurityManager來處理;然而,如果它耗時太長,並且意圖成爲惡意代碼,我正在努力尋找殺死外部代碼的方法。例如,如果外部的代碼看起來像:停止不可信的代碼,如果時間太長
while (true) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
// Oh well, keep running
}
}
這將永遠保持運行,並且Thread.interrupt()
不會做任何事來阻止該線程。是否有另一種方法來阻止不會導致任何問題的流氓線程?我碰到的所有問題都是Thread.stop()
,但似乎並不是所有與此相關的問題的選項。如果沒有,是否還有其他選項可用來以程序仍然能夠直接與它進行交互的方式運行此代碼?
這個問題沒有任何意義。如果用戶可以運行惡意代碼(根本沒有),那麼就沒有安全間隔來等待嘗試並殺死它。小程序因某種原因死亡。你真的想在這裏完成什麼? –
在應該監督它的可信代碼的同一個JVM中運行不可信的代碼是一個非常危險的想法。這是原因之一,但想想如果它只是分配內存,直到虛擬機與OOME崩潰,會發生什麼。 – biziclop