Остановка враждебных потоков в JVM - PullRequest
2 голосов
/ 17 июля 2011

Я пишу сервер, на котором может выполняться вредоносный код. Чтобы злоумышленник не бросил поток в бесконечный цикл, я хочу установить ограничение времени выполнения в одну секунду.

InterruptedException может быть пойман внутри бесконечного цикла, что позволяет злоумышленнику сохранить контроль над потоком. Таким образом, Thread.interrupt() не является приемлемым решением.

Моя текущая реализация не позволяет враждебным потокам получать какие-либо ресурсы (включая блокировки), использует Thread.stop() для прекращения выполнения и отменяет любые изменения, сделанные потоком. Моя главная жалоба заключается в том, что он использует устаревший метод Thread.stop(); Я не люблю использовать устаревший код.

Мне интересно, есть ли более приемлемое в отрасли решение, за исключением запуска / уничтожения совершенно новой JVM, которая потребовала бы слишком много ресурсов для моих целей.

Ответы [ 2 ]

5 голосов
/ 17 июля 2011

Единственный способ уничтожить поток - использовать отдельный процесс и уничтожить этот процесс. Thread.stop () генерирует ошибку ThreadDeath, которая может быть перехвачена и проигнорирована. т.е. catch(Throwable t) {}

Для получения более подробной информации о том, что на самом деле Thread.stop () делает Действительно ли Thread.stop () останавливает поток?

2 голосов
/ 17 июля 2011

Вы не можете гарантировать, что поток может быть остановлен, поскольку несколько методов блокировки (например, сокеты) не отвечают на прерывание ().

Я бы предложил очень строгий менеджер безопасности, чтобы вы могли быть абсолютно уверены, чтовредоносный код помещается в «песочницу»Если вам необходимо быть уверенным, подумайте о специальном загрузчике классов, который обеспечивает выполнение только допустимых операций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...