Каковы опасности манипулирования байт-кодом (если таковые имеются)? - PullRequest
2 голосов
/ 16 ноября 2010

Улучшение байт-кода кажется очень интересной техникой Java, но в ней есть ощущение «черной магии». Есть ли какие-либо недостатки в его использовании (кроме того факта, что функциональность добавляется в классы, что не очевидно из исходного кода)?

Вызывает ли это проблемы с безопасностью, сериализацией и т. Д.?

Ответы [ 2 ]

3 голосов
/ 16 ноября 2010

Есть ли какие-либо недостатки в его использовании (кроме того факта, что функциональность добавлена ​​в классы, что не очевидно из исходного кода)?

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

вызывает ли это проблемы с безопасностью,

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

Кроме того, модификация байт-кода:

  • затрудняет проведение надлежащего анализа безопасности на основе исходного кода, а
  • может свести на нет (ограниченные) преимущества безопасности при использовании инструмента статического анализа, такого как FindBugs.

сериализация и т. Д .?

Модификация байт-кода может делать вещи, которые сделают существующие сериализованные объекты читаемыми модифицированным классом; например добавляя и удаляя поля, или изменяя классы суперкласс и интерфейсы. Однако вы можете сделать то же самое, изменив исходный код.

2 голосов
/ 16 ноября 2010

JVM проверяет байт-коды , но девиантный байт-код может представлять угрозу безопасности.

...