2010-09-07 4 views
0

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

ответ

0

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

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

0

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

1

Были ли ваши проверки во время компиляции или во время выполнения?

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

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

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

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

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

+0

+1 для обозначения отражения. Вы можете использовать отражение, чтобы вызвать методы, упомянутые вами в других классах. И есть другие классы, например, в 'java.beans', которые позволяют относительно свободно использовать отражение косвенно. –

0

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

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