В java какие пакеты содержат команды уровня операционной системы? - PullRequest
0 голосов
/ 07 сентября 2010

Я хочу определить, может ли данная программа выполнять вредоносные операции, такие как разветвление, межпроцессный конвейер, перенаправление ввода / вывода, обработка файлов и т. Д. На самом деле я разрабатываю программу, которая проверяет java-коды и не хочет, чтобы кодер каким-либо образом повредил мою систему проверки кода.
Какие пакеты я должен искать в коде, чтобы гарантировать это?
Заранее спасибо ...!

Ответы [ 4 ]

1 голос
/ 07 сентября 2010

Ваши проверки будут во время компиляции или во время выполнения?

  • Если вы проверяете во время выполнения, вы можете использовать диспетчер безопасности с разрешениями.Взгляните на Security Manager Tutorial .Существует широкий список разрешений.Вы можете запретить доступ к файлам, даже открытые фреймы.

  • Что касается базовых классов, вам следует быть осторожным с java.lang.Runtime и java.lang.System, java.lang.ProcessBuilder.Они создают java.lang.Process.Также java.io.File, java.io.FileDescriptor, возможно, даже Sockets и java.nio.* работают в операционной системе / файловой системе.

  • Я бы также запретил рефлексию, java.lang.reflect.* и некоторые методыjava.lang.Class тоже отражающие.Загрузка классов по имени может обойти ваши проверки.Некоторые классы в java.beans.* также используют рефлексию.

  • В зависимости от ваших потребностей, вы можете даже захотеть, чтобы код пользователя запускался в песочнице .Но это может зайти слишком далеко для вас.Проверка использования класса (постоянный пул) может быть простым способом.

  • Как указывал ранее Колин ХЕБЕРТ, native также опасен.Но некоторые из них определенно необходимы, например, методы Object.

0 голосов
/ 07 сентября 2010

Краткий ответ: java.lang.Я считаю, что это единственный готовый пакет, включающий классы, которые дают вам доступ к функциям ОС.Ну, я предполагаю, что вы не включаете ввод / вывод как «связанные с ОС» вещи.Если вы это сделаете, то вам также нужно будет включить java.io, javax.swing и несколько других пакетов.

Более длинный ответ: программист может написать свои собственные функции JNI, которые взаимодействуют с ОСи положить их в любой пакет, который он любит.Попытка определить это может быть довольно сложно.Ну, я думаю, вы могли бы сказать, что любая «нативная» функция автоматически подозрительна.

0 голосов
/ 07 сентября 2010

Вам следует подумать и о проверке всех методов, помеченных как «нативные».

0 голосов
/ 07 сентября 2010

Большая часть функциональности взаимодействия с ОС предоставляется в java.lang.Runtime и java.lang.System. Обратите внимание, что они не требуют импорта, потому что они находятся в пакете java.lang.

Но ... если вы просто анализируете код, почему вас волнует, что он содержит? Возможно, вам следует обратить внимание на Java Security , а не на то, какие классы вызываются.

...