2015-02-10 6 views
0

В настоящее время я создаю язык программирования на основе JVM. Вместо того, чтобы иметь операторов, я решил разрешить символы как имена методов и создавать ссылочные классы компилятора для примитивных типов данных. Они аннотируются с так называемыми @Intrinsic аннотациями, которые принимают инструкции Bytecode в качестве их параметров. Вместо инструкции INVOKE компилятор использует их для генерации Bytecode при каждом вызове.Внутренние/Bytecode Аннотации Безопасность

Теперь я задаюсь вопросом, можно ли использовать эту (общедоступную) аннотацию, чтобы сделать что-то вредоносное на JVM, и если это должно быть ограничено компилятором, например, путем статического анализа.

(Сам язык также поддерживает Bytecode выражение)

ответ

1

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

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

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

0

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

Настоящий вопрос - это ваша модель угрозы. Обычно, если вы запускаете скомпилированный исполняемый файл на своем компьютере, предполагается, что он может делать все, что вы можете сделать в качестве текущего пользователя. Даже JVM следует этой модели на рабочих столах. (Существует также плагин Java-браузера, который пытается принудительно использовать изолированную среду Java на апплетах, загруженных из Интернета, к сожалению, с небольшим успехом)